PHP计算周数是星期六 - 星期六吗?对于给定的日期,我试图确定它的周的开始和结束日期以及下一周/前几周的开始日期。一切正常,除非我通过一个星期天,它认为日期是在前一周。
$start = $_GET['start'];
$year = date('Y', strtotime($start));
$week = date('W', strtotime($start));
$sunday = strtotime($year.'W'.$week.'0');
$next = strtotime('+7 Days', $sunday);
$prev = strtotime('-7 Days', $sunday);
echo '<p>week: ' . $week . '</p>';
echo '<p>sunday: ' . date('Y-m-d', $sunday) . '</p>';
echo '<p>next:' . date('Y-m-d', $next) . '</p>';
echo '<p>prev: ' . date('Y-m-d', $prev) . '</p>';
结果:
2011-01-09 (Sunday)
Week: 01
WRONG
2011-01-10 (Monday)
Week: 02
RIGHT
2011-01-15 (Saturday)
Week: 02
RIGHT
答案 0 :(得分:2)
PHP根本没有考虑几周,如果你得到了错误的结果,那是因为你的数学是关闭的。 :)
$date = strtotime('2011-1-14');
$startingSunday = strtotime('-' . date('w', $date) . ' days', $date);
$previousSaturday = strtotime('-1 day', $startingSunday);
$nextWeekSunday = strtotime('+7 days', $startingSunday);
答案 1 :(得分:2)
正如Dr.Molle指出的那样,关于“W”的信息是正确的。你的问题在这里:
$sunday = strtotime($year.'W'.$week.'0');
$sunday = strtotime($year.'W'.$week.'0');
$next = strtotime('+7 Days', $sunday);
$prev = strtotime('-7 Days', $sunday);
然后你在Timestamp对象上调用了strtotime(对不起,我不知道具体的术语)。
错误的参数类型(时间戳和字符串使用不正确)是问题的原因。这是我确定一周和一周开始日的代码:
<?php
$date = '2011/09/09';
while (date('w', strtotime($date)) != 1) {
$tmp = strtotime('-1 day', strtotime($date));
$date = date('Y-m-d', $tmp);
}
$week = date('W', strtotime($date));
echo '<p>week: ' . $week . '</p>';
?>
答案 2 :(得分:1)
正如ISO_8601中所定义的,date('W')
所指的是,一周以星期一开头。
但请注意并阅读ISO周:http://en.wikipedia.org/wiki/ISO_week_date
也许结果并不总是像预期的那样。
示例:
date('W',mktime(0, 0, 0, 1, 1, 2011))
它将返回52而不是01,因为一年中的第一个ISO周是给定年份中至少4天的第一周。
由于2011-1-1是星期六,只有2天,所以2011-1-1在2010年的最后一周(52)是ISO,而不是2011年的第一周。
答案 3 :(得分:1)
功能日期('W')使用ISO-8601定义,因此星期一是一周的第一天。
代替日期('W')使用strftime('%U')。
示例:
$date = strtotime('2011-01-09');
echo strftime('%U',$date);
结果:
02
代码:
$date = strtotime('2012-05-06');
$sunday = date('Y-m-d', strtotime(strftime("%Y-W%U-0", $date)));
$sturday = date('Y-m-d', strtotime(strftime("%Y-W%U-6", $date)));
echo $sunday . "\n";
echo $saturday;
结果:
2012-05-06
2012-05-12