, поэтому моя проблема довольно проста, но решение продолжает уклоняться от меня. Я пытаюсь получить список будущих дат с заданным интервалом, который соответствует неделе nr в месяц и день nr в неделю. например, мне нужно составить список дат 2-го понедельника на расстоянии 3 месяца.получение конкретных дат в будущем с помощью php
У меня есть форма, где пользователь указывает 2 даты и интервал.
так, что у меня есть что-то вроде:
$start_date = "2015-01-07";
$end_date = "2016-01-07";
$period = "+1 month";
затем, используя эту функцию из этой ссылки stackoverflow я получить то, что weeknr мой датой_начала является: (то есть: "первый понедельник")
function literalDate($timestamp) {
$timestamp = is_numeric($timestamp) ? $timestamp : strtotime($timestamp);
$weekday = date('l', $timestamp);
$month = date('M', $timestamp);
$ord = 1;
while(date('M', ($timestamp = strtotime('-1 week', $timestamp))) == $month) {
$ord++;
}
$lit = array(null, 'first', 'second', 'third', 'fourth', 'fifth');
return $lit[$ord].' '.$weekday;
}
$day_number = literalDate($start_date);
$list=array();
затем. я пытаюсь сделать это
while(strtotime($start_date) <= strtotime($end_date))
{
$list[]=$start_date;
$start_date=date('Y-m-d', strtotime("$start_date $period"));
$month = date('F', strtotime($start_date));
$start_date = date('Y-m-d', strtotime($day_number.' of '.$month)); //this always returns 1970-01-01
}
print_r($list);
как просили в комментариях мой ожидаемый выход что-то вроде
array(
[0] => 2015-01-07
[1] => 2015-02-04
[2] => 2015-03-04
[3] => 2015-04-01
[4] => 2015-05-06
[5] => 2015-06-03
[6] => 2015-07-01
[7] => 2015-08-05
[8] => 2015-09-02
[9] => 2015-10-07
[10] => 2015-11-04
[11] => 2015-12-02
)
Показать, что ваш ожидаемый результат для примера вы предусмотрели. –
Вы ошеломляете свои даты вокруг строк и целых чисел, как пьяный, ошеломляющий по дороге. После того, как вы strtotimed строки, ** LEAVE ** это как целое число, потому что вы всегда собираетесь преобразовать его обратно в int снова в самой следующей строке кода. –
почему-то мой мозг не был предназначен для понимания функции strtotime (да, я читал phpman около 1000 раз). поэтому я не знаю, как добавить период в $ start_date, но это не строка. вот в чем причина злоупотребления конверсией – Tavi