I'm trying to get the last Sunday between two week numbers - in order to avoid DST.
IN ORDER WORDS: Start a range of time - from the last Sunday in March to the last Sunday in October.
This is my code:
$heloo = gmdate('U');
if ( (date("W", $heloo) >= 12)
&& (date("W", $heloo) <= 43)
&& (date("N", $heloo) == 7) ) {
echo "YES Day is: ".date("N", $heloo). "<br />
Week is: ". date("W", $heloo);
} else {
echo "NO Day is: ".date("N", $heloo). "<br />Week is: ". date("W", $heloo);
}
The weeks seems to work fine but the days doesn't work at all. Could you please point me to the right direction or advice where to get some help?
:-)
Try this easy piece of code:
function rangeSundays($year, $month_start, $month_end) {
$res = array();
for ($i = $month_start; $i <= $month_end; $i++) {
$dt = strtotime('last sunday of this month', strtotime("$year-$i-1"));
$res[] = date('Y-m-d', $dt);
}
return $res;
}
So, use it this way
$date_array = rangeSundays(2011, 3, 10); // year, start month, end month
print_r($date_array);
Output
Array
(
[0] => 2011-03-27
[1] => 2011-04-24
[2] => 2011-05-29
[3] => 2011-06-26
[4] => 2011-07-31
[5] => 2011-08-28
[6] => 2011-09-25
[7] => 2011-10-30
)
Also, if default time zone is not set in your php config (php.ini) add something like this at start of your script to avoid throwing warnings in PHP.
date_default_timezone_set('UTC'); // or any other time zone
To print this result out to screen use
$date_array = rangeSundays(2011, 3, 10);
foreach($date_array as $x) {
echo "$x<br/>";
}
$year = 2011; // or which year you want
$month_start = 3; // for starting month; March in this case
$month_end = 10; // for ending month; October in this case
$res = array();
for ($i = $month_start; $i <= $month_end; $i++) {
$dt = strtotime('last sunday of this month', strtotime("$year-$i-1"));
$res[] = date('Y-m-d', $dt);
}
foreach($res as $sunday) {
echo "$sunday<br />";
}
Output
2011-03-27
2011-04-24
2011-05-29
2011-06-26
2011-07-31
2011-08-28
2011-09-25
2011-10-30
Note: DST doesn't affect dates in this case.
Your code looks like unnecessary complication :)