如何获得给定周数的第一周工作日? 我正在PHP中为日历应用程序创建一个函数。
这个想法:当我点击一个基本上使用strtotime并且+1个月的链接时,它当然只跳到同一天。我需要让周数正确。
示例:当我使用菜单从8月移动到9月时,它不应该选择我在8月份的相同日期,而是选择9月份的第一周数字的第一天(9月2日星期一,星期一)第36号。
从9月到10月:第40周,10月1日星期二。
答案 0 :(得分:3)
我找到了一个与你想要的完全一样的功能。这是setISODate
$date = new DateTime();
$date->setISODate(2013, 35, 1);
echo $date->format('Y-m-d');
您可以根据需要更改Y-m-d
日期格式
2013-08-26 // This week number and monday
setISODate(year, week, day)
答案 1 :(得分:0)
试试此代码
<?php
$week = 3;
$year = 2009;
$timestamp = mktime( 0, 0, 0, 1, 1, $year ) + ( $week * 7 * 24 * 60 * 60 );
$timestamp_for_monday = $timestamp - 86400 * ( date( 'N', $timestamp ) - 1 );
$date_for_monday = date( 'Y-m-d', $timestamp_for_monday );
?>
答案 2 :(得分:0)
就像每个人已经说过的那样,ISO周从星期一开始。引自http://en.wikipedia.org/wiki/ISO_week_date:Weeks start with Monday.
function getFirstWeekDay($year, $week) {
$dt = (new DateTime)->setISODate($year, $week, 1);
$dtC = clone $dt;
for ($N = $dt->format('N'); $N < 7; $N++) {
$dtC->modify('+1 day');
if ($dt->format('m') !== $dtC->format('m')) {
return $dtC;
}
}
return $dt;
}
echo getFirstWeekDay(2013, 40)->format('W\t\h \w\e\e\k \i\s Y-m-d');
# 40th week is 2013-10-01
echo getFirstWeekDay(2013, 1)->format('W\t\h \w\e\e\k \i\s Y-m-d');
# 1th week is 2013-01-01