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

Rock'n'rolla
На сайте с 14.09.2009
Offline
146
921


dateq2 = 27.01.2014
dateq3 = 02.02.2014

Какая из этих дат больше, а какая меньше?

Если сравнивать даты одного месяца, то все логично, скрипт корректно работает. К примеру

03.02.2014 > 01.02.2014

Если месяцы разные - то начинает работать не верно...

Показывает, что 27.01.2014 > 01.02.2014

"Vulcan-Bit - лучшая партнерка в сети" (http://vulcan-bit.com?invite=artem_kozirev) KMA.BIZ - Партнерка с крутым конвертом и отчислениями в долларах. Лить! (http://kma.biz)
T
На сайте с 11.08.2005
Offline
181
#1
Rock'n'rolla:
Показывает, что 27.01.2014 > 01.02.2014

Вы сравниваете даты как обычные строки...

Чтобы работало правильно их нужно:

* перевести в формат ГГГГ.ММ.ЧЧ

* перевести в time (вариант явно получше)

P
На сайте с 13.09.2013
Offline
39
#2

как то так


$dateq2 = str_replace('.', '-', '27.01.2014');
$dateq3 = str_replace('.', '-', '02.02.2014');

$dateq2 = strtotime($dateq2);
$dateq3 = strtotime($dateq3);


if ($dateq2 > $dateq3)
echo $dateq2 .' больше';
else if ($dateq2 < $dateq3)
echo $dateq3 .' больше';
else echo 'Равны';
F
На сайте с 12.03.2007
Offline
85
#3

....................

Как начать тренироваться (http://max-body.ru/quick_start.html), Бодибилдинг форум (http://fatal-energy.com/). Обменяюсь/куплю ссылками со статей (или статьями) с сайтами бодибилдинг/фитнес тематики.
Rock'n'rolla
На сайте с 14.09.2009
Offline
146
#4

$dateq2 = strtotime($dateq2); 

$dateq3 = strtotime($dateq3);

После добавления этих строк - пустой белый экран, скрипт перестает работать.

IL
На сайте с 20.04.2007
Offline
435
#5

Rock'n'rolla, поражаюсь Вашему упорству...

В одной из предыдущих тем мы научились(?) считать количество дней между датами.

Так вот, если это количество > 0, то первая дата больше (т.е. позже). Если < 0, то вторая дата "больше".

Или, через DateInteval - если интервал положительный (%R = '+'), то первая дата меньше.

пустой белый экран, скрипт перестает работать.

Рискну повториться... http://phpfaq.ru/debug

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
P
На сайте с 13.09.2013
Offline
39
#6
Rock'n'rolla:
$dateq2 = strtotime($dateq2); 

$dateq3 = strtotime($dateq3);


После добавления этих строк - пустой белый экран, скрипт перестает работать.

Что это значит? Без этих строк т.е. работает?

У меня все работает, код:

$date1 = '27.01.2014';

$date2 = '02.02.2014';

$dateq2 = str_replace('.', '-', $date1);
$dateq3 = str_replace('.', '-', $date2);

$dateq2 = strtotime($dateq2);
$dateq3 = strtotime($dateq3);


if ($dateq2 > $dateq3)
echo $date1 .' больше';
else if ($dateq2 < $dateq3)
echo $date2 .' больше';
else echo 'Равны';

Результат:

ValdisRu
На сайте с 02.10.2006
Offline
139
#7
Rock'n'rolla:
$dateq2 = strtotime($dateq2); 

$dateq3 = strtotime($dateq3);


После добавления этих строк - пустой белый экран, скрипт перестает работать.

подозреваю что поможет примерно следующий код

$site_tz='America/New_York';// или какая нужно

date_default_timezone_set ($site_tz);
Обалденный заработок на социальных сетях (https://goo.gl/Qtsq6M)
sashasib
На сайте с 12.02.2014
Offline
3
#8

По поводу того, что переводить в число (timestamp) — совершенно верно.

Ну, попробуйте так:



$start_date = explode('.', $dateq2);
$start_date = mktime(0, 0, 0, $start_date[1], $start_date[0], $start_date[2]);


$finish_date = explode('.', $dateq3);
$finish_date = mktime(0, 0, 0, $finish_date[1], $finish_date[0], $finish_date[2]);

После чего сравниваете начальную получившуюся дату и конечную.

---------- Добавлено 12.02.2014 в 17:20 ----------

Блин, даже не знаю, почему так неказисто в коде всё отобразилось.

Вот, в общем:

$start_date = explode('.', $dateq2);

$start_date = mktime(0, 0, 0, $start_date[1], $start_date[0], $start_date[2]);

$finish_date = explode('.', $dateq3);

$finish_date = mktime(0, 0, 0, $finish_date[1], $finish_date[0], $finish_date[2]);

Moneymaker8
На сайте с 07.07.2012
Offline
68
#9

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