如何使用 PHP 从日期中找到一周中的某一天?

如果我有一个 $date YYYY-mm-dd,并希望得到一个特定的 $day(由0(星期日)至6(星期六))的一周,YYYY-mm-dd是在。

例如,如果我得到 2012-10-11作为 $date5作为 $day,我想得到 2012-10-12,如果我得到 0作为 $day2012-10-14

编辑:
你们大多数人都误解了。我得到了一些日期,$date,并希望得到一个由0-6同一周指定的一天 $date是在。

所以,不,我不想 $date的那一天..。

320487 次浏览

You can use the date() function:

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

or

date('l'); // dayname

Example function to get the day nr.:

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


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

PHP 手册说:

星期几的数字表示

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

I'm afraid you have to do it manually. 获取日期的当前星期几,计算偏移量并将偏移量添加到日期。

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

试试看

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

只要:

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”就是您想要的结果。

I think this is what you want.

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

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

<?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)

If your date is already a DateTime or DateTimeImmutable you can use the format method.

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

格式字符串与 约会函数使用的字符串相同。


回答预期的问题:

$date_time->modify($target_day_of_week - $day_of_week . ' days');
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>

很简单,这个应该能行