以下是该问题的摘要:星期日,strtotime('this week')
将返回下周的开始。
在PHP中,本周似乎从星期一开始。但是,除了星期天以外的任何一天,这段代码
echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
输出本周的星期一的日期,似乎它应该在星期一的最后几周输出。看起来,在这种情况下,PHP将星期日和星期一视为本周的开始。现在是2012年12月10日星期一,或2012-12-10。 date('Y-m-d', strtotime('sunday last week'))
昨天返回2012-12-09
。
这是一个错误,还是我错过了什么?看起来这个明显的臭虫应该是众所周知的,但我找不到任何关于它的东西。本周开始的唯一方法是在周日使用一些特殊的处理方法吗?
$week_offset = (int) 'sunday' == date('l');
$week_start = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
答案 0 :(得分:10)
据我所知,这是一个错误。我认为strtotime('this week');
应该返回未来日期没有合理的理由。这是一个非常重要的错误。在我的特定情况下,我有一个排行榜,显示自本周开始以来用户得分最多的用户。但是在星期天,它是空的,因为strtotime
返回了未来日期的时间戳。我很怀疑,因为我不知道这怎么会被忽视,但是我找不到任何关于这个bug的其他报道。
感谢所有的时间和帮助,伙计们。
答案 1 :(得分:6)
以下是本周的周一:
echo date("Y-m-d", strtotime(date('o-\\WW')));
答案 2 :(得分:6)
这个答案很晚,但这是我一直在努力的事情。到目前为止,我尝试的每个解决方案都因某种原因而出现故障。这就是我最终得到的对我有用的东西。 (虽然它看起来很漂亮,但至少可以起作用。)
$thisMonday = strtotime('next Monday -1 week', strtotime('this sunday'));
答案 3 :(得分:3)
这不是理想的,但这是我使用的方法:
if(date('N') == 7) {
$date = date('Y-m-d',strtotime('monday last week'));
} else {
$date = date('Y-m-d',strtotime('monday this week'));
}
答案 4 :(得分:1)
I think the only problem with your coding is TimeZone.
<强>解决方案:强>
设置您自己的时区。以下是我自己时区的示例:
示例强>
date_default_timezone_set('Asia/Kolkata');
Set the above line before calling any time function.
度过愉快的一天。
答案 5 :(得分:0)
我认为不是尝试
echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
你应该试试
echo date('Y-m-d', strtotime('monday last week'));
答案 6 :(得分:0)
试试此代码
// set current date
$date = date("m/d/Y");
$ts = strtotime($date); // also $ts = time();
// find the year and the current week
$year = date('o', $ts);
$week = date('W', $ts);
// print week for the current date
$i = 1; // 1 denotes the first day of week
$ts = strtotime($year.'W'.$week.$i);
echo $day = date("l", $ts); // generate the name of day
echo "<br>";
echo $day = date("Y-m-d", $ts); // generate the date
你将得到当周的日期,无论你是星期一,你都会得到那个星期一的日期。
答案 7 :(得分:0)
如果你想要最近的星期一:
function mostRecentMonday(){
if(date("w") == 1){
return strtotime("midnight today");
} else {
return strtotime("last monday");
}
}
易于修改以使用DateTime,或甚至指定另一个日期作为基础。
答案 8 :(得分:0)
基于Bryant回答:
$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday')));
$last_week_date = date('d F Y', strtotime('next Monday -1 week + 6 days', strtotime('this sunday')));
答案 9 :(得分:0)
这是为了寻找适用于任何一天的友好解决方案。
function getWeekStart($week_start_day = "Monday") {
$week_days = array("Sunday"=>0,"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>5,"Saturday"=>6,);
if(!isset($week_days[$week_start_day])) {
return false;
} else {
$start_day = $week_days[$week_start_day];
$today = date("w");
$one_day = (60 * 60 * 24);
if($today < $start_day) {
$days_difference = 7 - ($start_day - $today);
} else {
$days_difference = ($today - $start_day);
}
$week_starts = strtotime(date("Y-m-d 00:00:00")) - ($one_day * $days_difference);
return $week_starts;
}
}
//Test: If today is Monday, it will return today's date
echo date("Y-m-d H:i:s", getWeekStart("Monday"));