获取两个日期范围内的上周日(GMT、DST)
Posted
技术标签:
【中文标题】获取两个日期范围内的上周日(GMT、DST)【英文标题】:Get last Sunday within a range of two dates (GMT, DST) 【发布时间】:2011-07-30 14:08:37 【问题描述】:我正在尝试获取两个星期之间的最后一个星期日 - 以避免 DST。
按顺序:开始一个时间范围 - 从 3 月的最后一个星期日到 10 月的最后一个星期日。
这是我的代码:
$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);
几周似乎工作得很好,但日子却一点也不工作。您能否指出正确的方向或建议在哪里获得帮助?
:-)
【问题讨论】:
发布您的输入和预期输出的格式。这是简单的任务:) 一些例子。 我不明白... if 语句真的转换为date("W", $heloo) == 12 && date("N", $heloo) == 7
另外,我无法将您的代码、您的描述和您的主题问题联系起来。请说得更具体些。
抱歉混淆...我想创建从 3 月的最后一个星期日到 10 月的最后一个星期日的日期范围。那可能吗?我已经编辑了代码。请现在看看。 :-)
【参考方案1】:
试试这段简单的代码:
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;
所以,这样用吧
$date_array = rangeSundays(2011, 3, 10); // year, start month, end month
print_r($date_array);
输出
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
)
此外,如果您的 php 配置 (php.ini) 中未设置默认时区,请在脚本开头添加类似内容以避免在 PHP 中引发警告。
date_default_timezone_set('UTC'); // or any other time zone
将此结果打印到屏幕上使用
$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 />";
输出
2011-03-27
2011-04-24
2011-05-29
2011-06-26
2011-07-31
2011-08-28
2011-09-25
2011-10-30
注意:在这种情况下,DST 不会影响日期。
您的代码看起来像不必要的复杂性:)
【讨论】:
我不太擅长函数。是否可以将代码编写为通用 PHP?我一直在努力,试图将我的数据输入到您的函数中。我有一个数据要处理。以上是关于获取两个日期范围内的上周日(GMT、DST)的主要内容,如果未能解决你的问题,请参考以下文章
如何获取该周(周一至周日)之间的日期的周日期范围(周一至周日)