strtotime - всегда возвращать NEXT [дата здесь] - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь использовать функцию strtotime, чтобы вернуть указанную дату. Например:

strtotime('thursday'); //Need to get NEXT Thurs, not today (assuming today is Th)

Использование next thursday будет работать в этом случае, но не работает с абсолютными датами, такими как:

strtotime('next aug 19'); //Should return 08-19-2011, but instead returns 12-31-1969

Я думаю, что это может потребовать некоторых регулярных выражений, но поскольку форматы, которые будут вводиться, настолько изменчивы, я бы предпочел найти более простое решение, если оно существует.

Спасибо!

Ответы [ 4 ]

1 голос
/ 19 августа 2010

Нет никакого способа, о котором я знаю. Но вы можете запросить текущий год, а затем, если необходимо, добавить 1 год:

$d = new DateTime("Aug 19");
if (new DateTime() >= $d) {
    $d->add(new DateInterval("P1Y"));
}
echo $d->format(DateTime::W3C);
0 голосов
/ 19 августа 2010

Вот к чему я пришел. Кредит предоставляется @Artefacto за помощь в поиске решения.

$interval = 'thursday';
$oldtime = strtotime('now');
$newtime = strtotime($interval);
$i = 0;
while ($oldtime >= $newtime) {
    $newtime = strtotime($interval, strtotime("+" . $i*$i . " hours"));
    $i++;
}

echo date("Y-m-d h:i:s", $newtime);
0 голосов
/ 19 августа 2010

Задание неправильного вопроса приведет к неправильному ответу.«Следующий 19 августа» может быть следующим годом, следующим тысячелетием, ...

try

strtotime('+1 year aug 19'); //or strtotime('+1 week aug 19');

happy coding

0 голосов
/ 19 августа 2010

Разве вы не можете использовать второй параметр метода strtotime, который является значением даты, чтобы дать вам основу для расчетов вместо сегодняшнего дня? Таким образом, вы можете установить это на 19 августа, а затем добавить немного калькуляции на +1 год.

...