如何使用PHP从日期中查找星期几?


85

如果我有一个,$date YYYY-mm-dd并且想要获得$day一周中的特定时间(由0(星期日)至6(星期六)指定)YYYY-mm-dd

例如,如果我有2012-10-11as$date5as $day,我想得到2012-10-12,如果我有0as $day2012-10-14

编辑:
你们大多数人都误解了它。我有一些日期,$date并且想要获得由同一周的0-6指定的日期$date

所以不,我不要$date...的日子


您的星期几开始?周一还是周日?我知道对于大多数人来说都是星期一,但我只是确定:p
键入者

3
我认为回答的人没有正确理解这个问题。他不想获取按日期表示的一天中的数字(可能是date('w')),但他想指定日期和日期号,并从指定的日期起从同一周接收相应的日期。 。
Vafliik

Answers:


127

我想这就是你想要的。

$dayofweek = date('w', strtotime($date));
$result    = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));

86

您可以使用date()函数:

date('w'); // day of week

要么

date('l'); // dayname

获取日期nr的示例函数:

function getWeekday($date) {
    return date('w', strtotime($date));
}

echo getWeekday('2012-10-11'); // returns 4

17

尝试

$date = '2012-10-11';
$day  = 1;
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday','Friday', 'Saturday');
echo date('Y-m-d', strtotime($days[$day], strtotime($date)));

2
好的方法,但是正如您在Rezigned的答案中看到的那样,您也可以使用“ 1 day”,从而使$ days数组无用。
Zulakis 2012年

1
这似乎更正确,因为它2012-10-14在您输入时返回正确的日期0,@Rezigned返回2012-10-07
Carl

7

如果您的日期已经是DateTimeDateTimeImmutable可以使用该format方法。

$day_of_week = intval($date_time->format('w'));

格式字符串与日期函数使用的格式字符串相同。


要回答预期的问题:

$date_time->modify($target_day_of_week - $day_of_week . ' days');

5

PHP手册说:

w星期几的数字表示

因此,您可以使用mktime构造日期,并在其中使用 date("w", $yourTime);


4

只是:

2012-10-11作为$ date和5作为$ day

<?php
$day=5;
$w      = date("w", strtotime("2011-01-11")) + 1; // you must add 1 to for Sunday

echo $w;

$sunday = date("Y-m-d", strtotime("2011-01-11")-strtotime("+$w day"));

$result = date("Y-m-d", strtotime($sunday)+strtotime("+$day day"));

echo $result;

?>

$ result ='2012-10-12'是您想要的。


1

恐怕您必须手动进行。获取日期的当前星期几,计算偏移量并将偏移量添加到日期。

$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
    ->add(
        new DateInterval($offset."D")
    )->format('Y-m-d')

1
感谢您的方法,但不,我不必手动进行。看看Rezigned的答案。
Zulakis 2012年

1

我不得不对葡萄牙语(巴西)使用类似的解决方案:

<?php
$scheduled_day = '2018-07-28';
$days = ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'];
$day = date('w',strtotime($scheduled_day));
$scheduled_day = date('d-m-Y', strtotime($scheduled_day))." ($days[$day])";
// provides 28-07-2018 (Sáb)

1
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>

很简单,这应该可以解决问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.