Сравните текущую дату с датой в формате д / мм / гггг в PHP - PullRequest
0 голосов
/ 05 декабря 2011

Каков наилучший способ проверить, является ли данная дата строкой d / mm / yyyy прошлое? Когда я использовал strtotime (), он не работал должным образом из-за неамериканских обозначений. Конечно, я мог бы иметь дело с датами в виде строк и сравнивать подстроки, но должен быть лучший способ.

if((strtotime('now')-strtotime($date)) > 86400) echo $date;

Ответы [ 4 ]

6 голосов
/ 05 декабря 2011

strtotime('now') - отвратительное злоупотребление этой функцией. Вы должны просто использовать time(), чтобы получить ТОЧНЫЙ ЖЕ результат, не прибегая к издержкам strtotime.

$thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
if (time() - $thatTime > 86400) echo $date;

соответствующие документы для date_create_from_format ()

2 голосов
/ 05 декабря 2011

Даты в форматах m / d / y или dmy устраняются неоднозначно, если взглянуть на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y;тогда как, если разделителем является тире (-) или точка (.), то предполагается, что используется европейский формат dmy.

strtotime () manual

Так что простой str_replace('/', '-', $date) должен сделать свое дело.

0 голосов
/ 05 декабря 2011

Если вы работаете> PHP5, это поможет:

function in_past($date) {
    $date = explode("/", $date);
    $now = time();
    $date = strtotime($date[1]."/".$date[0]."/".$date[2]);
    return $date < $now;
}

используется как:

$old_date = "23/01/1985";
if (in_past($old_date))
    echo 'so last season';
else 
    echo 'future';
0 голосов
/ 05 декабря 2011

Ну, очевидный ответ - переформатировать строку следующим образом:

$parts = explode('/',$dateStr);
if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
  // do stuff
}

EDIT

Однако ответ Марка Б. лучше, так что сделайте это.

...