如何获取当周的星期一和星期五的日期?
我有以下代码,但如果当天是星期日或星期六,则会失败。
$current_day = date("N");
$days_to_friday = 5 - $current_day;
$days_from_monday = $current_day - 1;
$monday = date("Y-m-d", strtotime("- {$days_from_monday} Days"));
$friday = date("Y-m-d", strtotime("+ {$days_to_friday} Days"));
答案 0 :(得分:60)
这些strtotime输入效果非常好:
strtotime( "next monday" );
strtotime( "previous monday" );
strtotime( "today" );
strtotime( "next friday" );
strtotime( "previous friday" );
您需要做的就是将逻辑包装在一些if语句中。
答案 1 :(得分:57)
最佳解决方案是:
$monday = date( 'Y-m-d', strtotime( 'monday this week' ) );
$friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
答案 2 :(得分:10)
这个问题需要一个DateTime答案: -
/**
* @param String $day
* @return DateTime
*/
function getDay($day)
{
$days = ['Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7];
$today = new \DateTime();
$today->setISODate((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]);
return $today;
}
<强>用法:强>
var_dump(getDay('Monday')->format('l dS F Y'));
var_dump(getDay('Friday')->format('l dS F Y'));
<强>输出:强>
string 'Monday 30th September 2013' (length=26)
string 'Friday 04th October 2013' (length=24)
答案 3 :(得分:1)
这实际上取决于你如何定义一周,但我想出了这个函数,它会给你最近的“星期一”或“星期五”(或任何一天)的日期:
function closestDate($day){
$day = ucfirst($day);
if(date('l', time()) == $day)
return date("Y-m-d", time());
else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day)))
return date("Y-m-d", strtotime('next '.$day));
else
return date("Y-m-d", strtotime('last '.$day));
}
输入:一周中的某一天(“星期日”,“星期一”等)
输出:如果我要求最近的“星期日”,今天是:
希望这会有所帮助:)
答案 4 :(得分:1)
正如最佳回答所示,使用PHP的strtotime()函数是最简单的方法。
然而,不是像他建议的那样使用if语句,你可以简单地重置回上一个星期日,并从那里获取你需要的日期。
$monday = strtotime('next monday', strtotime('previous sunday'));
$friday = strtotime('next friday', strtotime('previous sunday'));
答案 5 :(得分:0)
我需要根据ISO 8601定义当前周。我希望星期一始终被定义为本周开始的星期一。
以下解决方案对我来说非常好:
$monday = strtotime(date('o-\WW'));
$friday = strtotime("next friday",$monday);
对于$monday
,此方法将始终返回启动此日历周的星期一。遗憾的是,此方法依赖于PHP 5.1来解析o
日期格式。
要获得一周中的任何一天,您可以尝试:
function time_for_week_day($day_name, $ref_time=null){
$monday = strtotime(date('o-\WW',$ref_time));
if(substr(strtoupper($day_name),0,3) === "MON")
return $monday;
else
return strtotime("next $day_name",$monday);
}
用法:
time_for_week_day('wednesday');
time_for_week_day('friday',strtotime('2014-12-25'));
答案 6 :(得分:0)
我正在寻找类似的东西,除了我想要任何星期一,而不是本周。这就是我想出的:
function getSunday(DateTime $date){
$outdate = clone($date);
$day = $date->format("w"); // get the weekday (sunday is 0)
$outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday
return $outdate;
}
它接受任意日期并给出星期日。然后你可以轻松地将周日添加到周一到周六。
答案 7 :(得分:0)
我用:
$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 + 4 days', strtotime('this sunday')));
答案 8 :(得分:0)
获取当前周
$week = [];
$saturday = strtotime('saturday this week');
foreach (range(0, 6) as $day) {
$week[] = date("Y-m-d", (($day * 86400) + $saturday));
}