проверка даты strtotime проходит на недействительной дате - PullRequest
1 голос
/ 07 ноября 2011

Я занимаюсь настройкой базовой CMS, которая позволяет клиенту добавлять статьи в свое мобильное приложение.CMS написана на PHP и будет использовать JSON для доставки контента в мобильное приложение.

Теперь моя проблема в том, что есть возможность опубликовать статью в определенную дату, поэтому я хочу проверить дату дляпроверьте, действительно ли это.

Итак, чтобы проверить возможности, я сделал небольшой скрипт.Я использую strtotime() для проверки правильности даты, мой сценарий:

<?php

    $date[] = '2011-31-01';
    $date[] = '2011-02-31';

    foreach($date as $str) {
        if(strtotime($str) == false) {
            $result[] = '<p>[' . $str . '] Resulted in an <span style="color: red;">Error.</span></p>';
        } else {
            $result[] = '<p>[' . $str . '] Resulted in <span style="color: green;">Success.</span></p>';
        }
    }

    foreach($result as $return) {
        echo $return;
    }

?>

Теперь моя проблема с датой 2011-02-31, которая 31st February 2011 возвращается как действительная, когда, очевидно, это не так 'т.Итак, мой вопрос, почему он это делает?и есть ли лучший способ проверить, что дата действительна и существует?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 07 ноября 2011

checkdate(); Подтверждает григорианскую дату. Возвращает TRUE, если указанная дата действительна; в противном случае возвращает FALSE.

 if(checkdate(2, 31, 2011)){
      echo "Yeah";

  } else {echo "nah";}

Возвращает ложь!

Это путь.

2 голосов
/ 07 ноября 2011

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

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

...