strtotime PHP для числового значения даты + 1 неделя

У меня есть значение дня от 1 до 7, где 1 — понедельник, а 7 — воскресенье.

Мне нужно получить значение strtotime соответствующего дня на СЛЕДУЮЩЕЙ неделе.

Например: Сегодня вторник, 13 ноября.

Мое значение дня равно "2", поэтому strtotime должно возвращать соответствующее значение для вторника, 20 ноября. Мое дневное значение равно «1», поэтому strtotime должно возвращать соответствующее значение для понедельника, 19 ноября. Мое значение дня равно «5», поэтому strtotime должно возвращать соответствующее значение для пятницы, 23 ноября.

Я надеюсь, что это можно сделать с помощью нескольких встроенных функций PHP (strtotime(+1week+something))? Если нет, я попытаюсь закодировать некоторые проверки сравнения!

Спасибо!


person Craig Wilson    schedule 13.11.2012    source источник


Ответы (4)


function dayNextWeek($num) {
  return date('Y-m-d', strtotime("+1 week +" . ($num - date('w'))  . "days"));
}

И для проверки:

foreach (range(1, 7) as $i) {
  echo $i . ' ' . dayNextWeek($i) . "\n";
}

ВЫВОД

1 2012-11-19
2 2012-11-20
3 2012-11-21
4 2012-11-22
5 2012-11-23
6 2012-11-24
7 2012-11-25
person sberry    schedule 13.11.2012
comment
Это идеально, спасибо! (знал, что это можно сделать за +1 неделю + что-то!) - person Craig Wilson; 13.11.2012

Широко не тестировалось:

$givenDayNumber = 1;             // Your value here
$date = new DateTime();          // Today (reference point)
$currentDayOfWeek = date('N');   // This is 1 = Monday, see php date manual for more options
$diff = $givenDayNumber- $currentDayOfWeek; // Difference between given number and todays number
$date->modify('+ '.$diff.' day'); // Subtract difference
$date->modify('+ 1 week');        // Add a week
echo $date->format('d/m/Y');      // Output

Кодпад здесь для возни: http://codepad.org/7SylbJOX

person Martin Lyne    schedule 13.11.2012

Надеюсь, это должно сработать для вас.

<?php
$array = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
$your_value = 2;
$str = 'next ' . $array[$your_value -1];
echo date('D d M Y', strtotime($str));

?>

http://codepad.org/OIrzRxpl

person Abdul Haseeb    schedule 13.11.2012

Пытаться:

 $day_nxt_week = date('N', strtotime(date('Ymd') . '+1 week'));
 print_r($day_nxt_week);

Демо

person Teena Thomas    schedule 13.11.2012
comment
Спасибо за ответ. Это просто возвращает 2, а не значение strtotime на основе смещения? Спасибо! - person Craig Wilson; 13.11.2012