Сравнение дат на PHP

malls
На сайте с 08.08.2005
Offline
255
3321

Такой вот неоднозначный вопрос возник. Нужно сравнивать даты. Кто-нибудь сталкивался с готовыми решениями или придется самому городить?

Смысл в следующем - есть две строки в формате "YYYY-MM-DD", нужно сравнить их между собой чтобы выяснить какая из дат более ранняя/позняя.

В простейшем варианте конечно работает strtotime("2009-01-17"); и дальше разбор полетов по timestamp, но если даты из прошлого века?

Т.е., например: 1738-04-14 и 1856-11-23 ???

dkameleon
На сайте с 09.12.2005
Offline
386
#1

если они в одном формате и группы числе идут по убыванию, то на "больше-меньше" можно проверить через strcmp

Дизайн интерьера (http://balabukha.com/)
malls
На сайте с 08.08.2005
Offline
255
#2
dkameleon:
если они в одном формате и группы числе идут по убыванию, то на "больше-меньше" можно проверить через strcmp

оля! спасибо, не подумал, работает... :)

жаль - не дает "поблагодарить"...

vid0k
На сайте с 28.09.2008
Offline
7
#3

можно разбить дату через explode("-",$time);

а потом сравнить числа в массивах

Безлимитный трафик, 1Гб под сайт за 45 рублей! (http://best-hoster.ru/order/host.php?uid=7407&bid=1)
[Удален]
#4
malls:
Т.е., например: 1738-04-14 и 1856-11-23 ???

Воспользуйтесь регулярными выражениями:


preg_match("/([0-9]+)-([0-9]+)-([0-9]+)/","1898-11-23",$arr);
$dx = $arr[1]*365 + $arr[2]*30 + $arr[3];

Вместо "1898-11-23", естественно, ваша строка.

Этим методом Вы не получите абсолютной даты, т.к. количества дней в годах и месяцах разное, но для сравнения этого более чем достаточно.

M
На сайте с 20.08.2004
Offline
376
#5

а зачем так усложнять, получаете уникальные даты методом убирания всего кроме чисел. Но следите за тем что бы формат был YYYYMMDD - этого будет достаточно. Наша система дат, имхо наглядней, но для сортировки проще эта :) Я думаю убрать лишние символы для вас не составит труда.

$date_arr[] = (str_replace("-","", '1400-03-22'));

$date_arr[] = (str_replace("-","", '1450-11-04'));

$date_arr[] = (str_replace("-","", '1980-07-28'));

$date_arr[] = (str_replace("-","", '1655-10-15'));

Потом просто сортируете массив.

Если эти данные в mysql вообще шара

отец сыночка, лапочки дочки и еще одного сыночка
[Удален]
#6
Miracle:
$date_arr[] = (str_replace("-","", '1400-03-22'));

И это правда.. если строки дат заведомо имеют правильный синтакс.

В случае preg_match можно еще и контроллировать выражение:

 if (preg_match("/([0-9]+)-([0-9]+)-([0-9]+)/","1898-12-11",$arr)) 

$dx = $arr[1]*365 + $arr[2]*30 + $arr[3];
else $dx = -1;
M
На сайте с 20.08.2004
Offline
376
#7
serg-deev:
В случае preg_match можно еще и контроллировать выражение:

Контролировать надо на этапе добавления а не на этапе испльзования :)

RU
На сайте с 08.12.2008
Offline
9
#8

:)

Ребят, а вам не кажется, что после этого сообщения:

dkameleon:
если они в одном формате и группы числе идут по убыванию, то на "больше-меньше" можно проверить через strcmp

тему можно закрыть?.. :)

нагородили то, нагородили, вам процессорного времени совсем не жаль?.. :D

доступный способ для оплаты ваших услуг (http://www.smsdostup.ru/3137/) Дивная верстка за $10 (/ru/forum/324509)
malls
На сайте с 08.08.2005
Offline
255
#9
Real-Unior:
:)
Ребят, а вам не кажется, что после этого сообщения:
тему можно закрыть?.. :)

Можно - но тогда народу не о чем поговорить будет! :)

[Удален]
#10
Miracle:
Контролировать надо на этапе добавления а не на этапе испльзования :)

Ну уж коль пошла такая пьянка, то и знаки `-` можно было убрать при добавлении.

Тогда зачем Ваш пост ?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий