Нет необходимости преобразовывать в метку времени для сравнения, поскольку строки проверяются как даты в каноническом формате «ГГГГ-ММ-ДД».
Этот тест будет работать:
( ( $date_from_user >= $start_date ) && ( $date_from_user <= $end_date ) )
Дано:
$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';
ПРИМЕЧАНИЕ. Сравнение строк, подобных этой, допускает «недействительные» даты, например (32 декабря) «2009-13-32» и для странно отформатированных строк «2009/3/3», так что сравнение строк НЕ будет эквивалентно сравнению даты или времени. Это работает ТОЛЬКО, если значения даты в строках имеют формат CONSISTENT и CANONICAL .
РЕДАКТИРОВАТЬ , чтобы добавить сюда примечание, уточняя очевидное.
Под CONSISTENT я имею в виду, например, что сравниваемые строки должны быть в одинаковом формате: месяц всегда должен быть двумя символами, день всегда должен быть двумя символами, а символ разделителя всегда должен быть тире. Мы не можем достоверно сравнить «строки», которые не состоят из четырех символов года, двух символов месяца, двух символов дня. Например, если бы в строках было сочетание одного символа и двух символьных месяцев, мы получили бы неожиданный результат при сравнении '2009-9-30'
с '2009-10-11'
. Мы по-человечески видим, что «9» меньше, чем «10», но при сравнении строк мы увидим '2009-9'
больше, чем '2009-1'
. Нам не обязательно иметь символы разделителя тире; мы могли бы так же надежно сравнить строки в формате 'YYYYMMDD'
; если есть символ разделителя, он всегда должен быть там и всегда быть одним и тем же.
Под CANONICAL я имею в виду формат, в результате которого будут отсортированы строки, отсортированные по дате. То есть строка будет сначала иметь представление «год», затем «месяц», затем «день». Мы не можем надежно сравнивать строки в формате 'MM-DD-YYYY'
, потому что это не канонично. Сравнение строк будет сравнивать MM
(месяц) до сравнения YYYY
(год), поскольку сравнение строк выполняется слева направо.) Большим преимуществом формата строки «ГГГГ-ММ-ДД» является то, что каноническое; даты, представленные в этом формате, можно надежно сравнивать как строки.
[ДОБАВЛЕНИЕ]
Если вы действительно хотите преобразовать метку времени в php, помните об ограничениях.
На некоторых платформах php не поддерживает значения меток времени ранее 1970-01-01 и / или позже 2038-01-19. (Такова природа 32-разрядного целого числа с меткой времени в Unix.) Предполагается, что более поздние версии pf php (5.3?) Решат эту проблему.
Часовой пояс также может быть проблемой, если вы не будете осторожны в использовании одного и того же часового пояса при преобразовании строки в метку времени и из метки времени обратно в строку.
НТН