Ответ 1
Я думаю, что это то, что вы хотите.
$dayofweek = date('w', strtotime($date));
$result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
Если у меня есть $date
YYYY-mm-dd
и вы хотите получить конкретную $day
(указанную в 0 (воскресенье) до 6 (субботу)) недели, в которой находится YYYY-mm-dd
.
Например, если я получил 2012-10-11
как $date
и 5
как $day
, я хочу получить 2012-10-12
, если у меня есть 0
как $day
, 2012-10-14
EDIT:
Большинство из вас неправильно поняли это. Я получил некоторую дату, $date
и хочу получить день, указанный 0-6 той же недели. $date
находится.
Так что нет, мне не нужен день $date
...
Я думаю, что это то, что вы хотите.
$dayofweek = date('w', strtotime($date));
$result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
Вы можете использовать функцию 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
Try
$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' - это то, что вы хотите.
Руководство PHP:
w Числовое представление дня недели
Следовательно, вы можете построить дату с mktime и использовать в ней date("w", $yourTime);
Если ваша дата уже является DateTime
или DateTimeImmutable
вы можете использовать метод format
.
$day_of_week = intval($date_time->format('w'));
Строка формата идентична той, которая используется функцией date.
Чтобы ответить на заданный вопрос:
$date_time->modify($target_day_of_week - $day_of_week . ' days');
Боюсь, вам нужно сделать это вручную. Получить дату текущего дня недели, рассчитать смещение и добавить смещение к дате.
$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
->add(
new DateInterval($offset."D")
)->format('Y-m-d')
Мне пришлось использовать аналогичное решение для португальского (Бразилия):
<?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)
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>
Просто, это должно сработать