获取本周的星期一和星期五的日期(PHP)

时间:2009-09-16 08:15:07

标签: php date datetime

如何获取当周的星期一和星期五的日期?

我有以下代码,但如果当天是星期日或星期六,则会失败。

$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"));

9 个答案:

答案 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)

See it working

答案 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));

}

输入:一周中的某一天(“星期日”,“星期一”等)

输出:如果我要求最近的“星期日”,今天是:

  1. “星期天”:我将今天的日期
  2. “星期一”:我会得到昨天的日期
  3. “星期六:明天的约会
  4. 希望这会有所帮助:)

答案 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));
        }