Для порівняння не потрібно перетворювати на мітку часу, враховуючи те, що рядки перевіряються як дати у канонічному форматі 'РРРР-ММ-ДД'.
Цей тест буде працювати:
( ( $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?) Мають вирішити цю проблему.
Часовий пояс також може бути проблемою, якщо ви не будете обережно використовувати той самий часовий пояс при перетворенні з рядка в мітку часу і з мітки часу назад у рядок.
HTH