我正在试图弄清楚如何才能获得过去6个月的第一天,并且无法找到可行的解决方案。
如果我写date("Y-m-d 00:00:00", strtotime("-1 week", date("Y-m-d"));
它只是从当前日期减去7天;我想做的是总是从那一周返回星期一的日期。
预期结果:
2011-8-8 00:00:00
2011-8-1 00:00:00
2011-7-25 00:00:00
2011-7-18 00:00:00
etc
答案 0 :(得分:4)
这应该这样做:
for ($i=0; $i<52/2; $i++)
echo date('Y-m-d', mktime(1, 0, 0, date('m'), date('d')-date('w')-$i*7+1, date('Y'))) . " 00:00:00\n";
它稍微改变了Mike's Post,谁想要星期日而不是星期一。
答案 1 :(得分:2)
我建议DateTime::createFromFormat
。
在PHP 5.3之前,您可以使用strtotime
代替:
<?php
define('NUM_WEEKS', 10);
$dates = Array();
$dates[] = strtotime('Monday');
for ($i = 0; $i < NUM_WEEKS-1; $i++)
$dates[] = strtotime('-1 week', $dates[$i]);
foreach ($dates as $date)
echo strftime('%c', $date) . "\n";
?>
输出:
Mon Aug 22 00:00:00 2011
Mon Aug 15 00:00:00 2011
Mon Aug 8 00:00:00 2011
Mon Aug 1 00:00:00 2011
Mon Jul 25 00:00:00 2011
Mon Jul 18 00:00:00 2011
Mon Jul 11 00:00:00 2011
Mon Jul 4 00:00:00 2011
Mon Jun 27 00:00:00 2011
Mon Jun 20 00:00:00 2011
答案 2 :(得分:2)
如果你想在周六(或任何其他日子)做这件事 在一周的第一天选择数据集,这是一个很好的选择 解决方法:
<?php $last_sat=date("z", strtotime("last Saturday"));
$second_last_sat=date("z", strtotime("last Saturday-1 week")); ?>
来源:http://www.php.net/manual/en/function.strtotime.php
你可能想要的是
<?php $last_mon=date("z", strtotime("last Monday "));
$second_last_mon=date("z", strtotime("last Monday-1 week")); ?>
等。