Page 1 of 1

How to get a date range if week provided?

Posted: Tue Nov 15, 2005 8:43 pm
by gnel2000
I was finding a way to get a date range if the week number provided.
Normally, the week(date) function will return a week number if the date provided.
But now i would like to do vice versa. Is anyone have any idea about this?

Posted: Tue Nov 15, 2005 9:17 pm
by RobertPaul
Here's a solution in ColdFusion, if you can manage to translate it...

But I'm pretty stumped. Which is going to bug me...

Posted: Tue Nov 15, 2005 9:38 pm
by John Cartwright
use strtotime() to get the timestamp of the first day of the week and add 604800 seconds to the timestamp. (equivilent to one week)

So you have

Code: Select all

//$date is assumed to be a timestamp of the day your searching
if (($date > $timeStart) && ($date < $timeEnd)) {

}
Have a good read of strotime.. it is very useful and extremely flexible

Posted: Tue Nov 15, 2005 10:16 pm
by Burrito
I was bored and haven't looked at cf in a long time and thought I'd translate the link you sent:

this:

Code: Select all

<cfif IsDefined("form.bleah")>
<cfset firstday = "01/01/"&datepart("yyyy",now())>


<Cfset refday = dateadd("ww", form.checkdate -1 ,firstday)>

<cfset thisday = refday>
<CFSET first_day_of_last_week = DateAdd("d", (DayOfWeek(thisday)-1)*-1, thisday)>
<CFSET last_day_of_last_week = DateAdd("d", 6, first_day_of_last_week)>
</cfif>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>

<body>
<cfif IsDefined("form.bleah")><cfoutput>For week number #form.checkdate#, 
we use #firstday# as a reference (You can manipulate the reference date in line 2 of this script).  #form.checkdate# weeks from this date is
#dateformat(thisday,"mm/dd/yyyy")#, which 
is in the week from #dateformat(first_day_of_last_week,"mm/dd/yyyy")# 
- #dateformat(last_day_of_last_week,"mm/dd/yyyy")# , so #dateformat(first_day_of_last_week,"mm/dd/yyyy")#
is the first day of week #form.checkdate#.


</cfoutput></cfif>
<form action="test.cfm" method="post">
Enter week number:<input type="text" name="checkdate"><br>
<input type="submit" name="bleah" value="Get date info"></form>


</body>
</html>
translates to this:

Code: Select all

<?
if(isset($_POST['bleah']))
{
	$firstday = "01/01/".date("Y");
	$refday = $_POST['checkdate'] -1;
	$refday = date("m/d/Y",strtotime($firstday . " + " . $refday ." weeks"));
	$thisday = $refday;
	$first_day_of_last_week = date("w",strtotime($thisday));
	$forlastweek = 6 - $first_day_of_last_week;
	$first_day_of_last_week = date("m/d/Y",strtotime($thisday . " -" . $first_day_of_last_week . " days"));
	$last_day_of_last_week = date("m/d/Y",strtotime($thisday . " + " . $forlastweek . " days"));
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>

<body>
<?
if(isset($_POST['bleah']))
{
?>
For week number <?=$_POST['checkdate'];?>, 
we use <?=$firstday;?> as a reference (You can manipulate the reference date in line 2 of this script).  <?=$_POST['checkdate'];?> weeks from this date is
<?=$thisday;?>, which 
is in the week from <?=$first_day_of_last_week;?> 
- <?=$last_day_of_last_week;?> , so <?=$first_day_of_last_week;?> 
is the first day of week <?=$_POST['checkdate'];?>.
<?
}
?>


<form action="test.php" method="post">
Enter week number:<input type="text" name="checkdate"><br>
<input type="submit" name="bleah" value="Get date info"></form>


</body>
</html>
and it works (tested) exactly the same. Not sure if it's what you're after, but the translation is identical....

Posted: Tue Nov 15, 2005 10:20 pm
by gnel2000
Found this at http://www.php.net, tried, is working

Code: Select all

function findWeekPeriod($week, $year)
{
   $aPeriod = array();

   // if you are a Catholic you should use $x = 0 considering Sunday as the first day of the week. I'm an Orthodox so I consider it the seventh day of the week

   $x = 1;

   $aPeriod['start'] = date("Y-m-d H:i:s", mktime(0, 0, 0, 1, 1 + $week*7 + $x - 6, $year));

   $aPeriod['end'] = date("Y-m-d H:i:s", mktime(0, 0, 0, 1, 1 + $week*7 + $x, $year));

   return $aPeriod;
}