4
$date = 'some date';
$todays_week = date('W',strtotime($date));
此代码给出了星期数为星期一为一周的第一天。我想要考虑星期几的星期数作为星期的开始日期。我怎么做?考虑周日作为开始日,我怎样才能得到周数?
$date = 'some date';
$todays_week = date('W',strtotime($date));
此代码给出了星期数为星期一为一周的第一天。我想要考虑星期几的星期数作为星期的开始日期。我怎么做?考虑周日作为开始日,我怎样才能得到周数?
据我所知,没有任何选项可以更改开始日期。所以,你可以检查当天是星期天,如果是,则增加周数与1:
function getIsoWeeksInYear($year) {
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
function getWeek($date) {
$week = date('W',strtotime($date));
$day = date('N',strtotime($date));
$max_weeks = getIsoWeeksInYear(date('Y',strtotime($date)));
if($day == 7 && $week != $max_weeks) {
return ++$week;
} elseif($day == 7) {
return 1;
} else {
return $week;
}
}
echo getWeek('2012-12-30');
最优雅的解决方案是简单地一整天加1后,输入:
$todays_week = date('W', strtotime($date) + 60 * 60 * 24);
唯一不适用的情况是12月31日它是星期天。在这种情况下,答案将不正确地说出1.你必须检查这个。
不完全。请记住,ISO 8601星期数字范围从1 - 53 *包括*。例如,2010年1月3日的星期日是ISO 2009年,ISO第53周。[“如果1月1日是星期一,星期二,星期三或星期四,则在第01周。如果1月1日是星期五,星期六或星期天,它在上一年的第52或53周(没有00周)。12月28日总是在其一年的最后一周。“](http://en.wikipedia.org/wiki/ISO_8601# Week_dates) – user113215
感谢您的评论:+1。上周我不确定。然后将其更改为53。 – enenen
并非所有的ISO年份都有53周。周数是* 52或53,取决于各种因素。请参阅[ISO周日期](http://en.wikipedia.org/wiki/ISO_week_date)。简而言之,12月28日的测试应该会发现一年中的最高周数(52或53)。 – user113215