Для сравнения нет необходимости преобразовывать во временную метку, поскольку строки проверяются как даты в каноническом формате «ГГГГ-ММ-ДД».
Этот тест будет работать:
( ( $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», так что сравнение строк НЕ будет эквивалентно сравнение даты или времени. Это работает ТОЛЬКО, если значения даты в строках находятся в СООТВЕТСТВИИ и КАНОНИЧЕСКОМ формате.
ИЗМЕНИТЬ, чтобы добавить сюда примечание, уточняя очевидное.
Под СОГЛАСОВАННЫМ я подразумеваю, например, что сравниваемые строки должны быть в одинаковом формате: месяц всегда должен состоять из двух символов, день всегда должен состоять из двух символов, а символ-разделитель всегда должен быть тире. Мы не можем надежно сравнить «строки», которые не являются четырехзначным годом, двухсимвольным месяцем и двухсимвольным днем. Если бы у нас было сочетание одного символа и двух символов месяца в строках, например, мы получили бы неожиданный результат при сравнении '2009-9-30'
с '2009-10-11'
. По-человечески мы видим, что «9» меньше «10», но при сравнении строк будет видно, '2009-9'
что оно больше '2009-1'
. Нам не обязательно иметь символы-разделители тире; мы могли так же надежно сравнивать строки в'YYYYMMDD'
формат; если есть символ-разделитель, он должен быть всегда и всегда одинаков.
Под CANONICAL я имею в виду формат, в результате которого строки будут отсортированы по дате. То есть в строке сначала будет отображаться «год», затем «месяц», затем «день». Мы не можем надежно сравнивать строки в 'MM-DD-YYYY'
формате, потому что это не канонично. При сравнении строк сравнивается MM
(месяц) до сравнения YYYY
(год), поскольку сравнение строк выполняется слева направо.) Большое преимущество строкового формата «ГГГГ-ММ-ДД» состоит в том, что он является каноническим; даты, представленные в этом формате, можно надежно сравнивать как строки.
[ДОБАВЛЕНИЕ]
Если вы все же перейдете на преобразование метки времени php, помните об ограничениях.
На некоторых платформах php не поддерживает значения отметок времени до 01.01.1970 и / или позже 19.01.2038. (Такова природа 32-битного целого числа временной метки unix.) Более поздние версии pf php (5.3?) Должны решить эту проблему.
Часовой пояс также может быть проблемой, если вы не используете один и тот же часовой пояс при преобразовании из строки в метку времени и из метки времени обратно в строку.
HTH