Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение даты
 
 автор: sl1p   (11.08.2008 в 16:10)   письмо автору
 
 

Запутался немного.
Нужно сравнить дату1 и дату2..

я так понимаю нужно перевести её с помощью mktime()?
Если да то правильно ли я перевожу?

mktime(0,0,0,08,11,2008);

тобишь часы,минуты,секунды упускаем и щитаем 08 - месяц, 11 - день, 2008 - год?
потом точно также переводим вторую и сравниваем?

  Ответить  
 
 автор: Trianon   (11.08.2008 в 16:29)   письмо автору
 
   для: sl1p   (11.08.2008 в 16:10)
 

Так можно делать, если дата попадает в диапазон 1970-2038гг

Если даты хранятся в формате MySQL 'YYYY-MM-DD' их можно сравнивать прямо.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 16:32)   письмо автору
 
   для: Trianon   (11.08.2008 в 16:29)
 

дата хранится как текст дд.мм.гггг

как такое можно сравнить?
тоесть кароче скажу прямо цель.

есть запись в бд 11.08.2008 (текст)
мне нужно сделать проверку чтобы юзер не ввёл дату меньше той что в бд..

как посравнивать то)

  Ответить  
 
 автор: Trianon   (11.08.2008 в 16:55)   письмо автору
 
   для: sl1p   (11.08.2008 в 16:32)
 

переделать в БД запись на нормальный формат.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 17:00)   письмо автору
 
   для: Trianon   (11.08.2008 в 16:55)
 

хм а если потом эту самую дату мне нужно выдать в другом формате? как её переставить?)
да не ну это бред я уверен можно както и не в мускульном формате сравнить=\

получается юзер должен будет тоже вводить дату криво в гггг.мм.дд=\
или перестановка под такой формат лишняя етня=\

  Ответить  
 
 автор: DDK   (11.08.2008 в 17:38)   письмо автору
 
   для: sl1p   (11.08.2008 в 17:00)
 

Переделайте поле с датой в БД в тип DATE и сравнивайте как обычные строки при запросе к БД

  Ответить  
 
 автор: Trianon   (11.08.2008 в 17:48)   письмо автору
 
   для: sl1p   (11.08.2008 в 17:00)
 

>хм а если потом эту самую дату мне нужно выдать в другом формате? как её переставить?)

Для этого применяется MySQL-функция DATE_FORMAT() - уже на этапе получения результатов запроса.


>я уверен можно както и не в мускульном формате сравнить=\
>да не ну это бред
Я тоже уверен, что можно, и даже знаю , как именно.
И не менее Вашего убежден что это бред. А бредовые решения я стараюсь здесь не предлагать, чтоб они потом не тиражировались другими.

>
>получается юзер должен будет тоже вводить дату криво в гггг.мм.дд=\

Вовсе нет. пользователь вводит дату в привычно ему формате. Скрипт преобразует в стандартный.
В стандартном формате дата уходить в БД и там хранится. При необходимости скрипт преобразует дату в привычный пользователю формат.


Мало кому известный факт: привычный большинству людей формат - именно восточный.
Помимо этого он крайне удобен из-за сравнений и сортировок.

И, наконец, он автодетерминируемый. Если написано 03/05/2008 можно долго гадать третье мая это или пятое марта. Если написано 2008/05/03 - вариант один.

>или перестановка под такой формат лишняя етня=\

Фразы не понял.

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 17:51)   письмо автору
 
   для: Trianon   (11.08.2008 в 17:48)
 

> Фразы не понял.

Лишняя е*ня :)

  Ответить  
 
 автор: sl1p   (11.08.2008 в 18:04)   письмо автору
 
   для: Trianon   (11.08.2008 в 17:48)
 

извиняюсь,почему итак понятно если 2008.05.03? Мне не понятно напримерО_о мне привычна только дд.мм.гггг по возрастанию так сказать)

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 18:11)   письмо автору
 
   для: sl1p   (11.08.2008 в 18:04)
 

Это не важно - привычно или нет. Это только в таблице будет дата в таком формате.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 18:13)   письмо автору
 
   для: BinLaden   (11.08.2008 в 18:11)
 

а я понял.. я думал привычно людям вообще)
----
ну вот хорошо, есть дата в бд в её формате. Как дальше?)

  Ответить  
 
 автор: sl1p   (11.08.2008 в 18:11)   письмо автору
 
   для: sl1p   (11.08.2008 в 18:04)
 

ну хорошо допустим я поменял в бд поле на дату. Как теперь сравнить с вводимым текстом?=\ он же не находится в бд..

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:14)   письмо автору
 
   для: sl1p   (11.08.2008 в 18:04)
 

потому что 03/05/2008
может быть написано европейцем (и тогда это будет 3 мая)
может быть написано американцем(и тогда это будет 5 марта)

А 2008/05/03 может быть написано азиатом (кем-то из китая/кореи/японии)
А они пишут дату только в порядке убывания весов разрядов. Как время.

Вы, полагаю, европеец - вот Вам и привычно.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 18:18)   письмо автору
 
   для: Trianon   (11.08.2008 в 18:14)
 

так или иначе придётся сравнивать не в бд, потому как вторая дата находится не в бд=\

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 18:26)   письмо автору
 
   для: sl1p   (11.08.2008 в 18:18)
 

Почему? MySQL позволяет сравнивать значения полей со строками и числами.

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:37)   письмо автору
 
   для: sl1p   (11.08.2008 в 18:18)
 

а это несущественно.
Нормально сравнить элементы (что в SQL что в php) Вы сможете только тогда, когда они поразрядно выровнены, и записаны начиная со старшего. В случае чисел такие тонкости берет на себя процессор, со строками же приходится возиться программисту.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 19:09)   письмо автору
 
   для: Trianon   (11.08.2008 в 18:37)
 

хм. ну ок есть 2 даты формата г.м.д. как их сравнить?

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 19:21)   письмо автору
 
   для: sl1p   (11.08.2008 в 19:09)
 

Обычно. С помощью <, >, !=, <>, >=, >=.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 19:44)   письмо автору
 
   для: BinLaden   (11.08.2008 в 19:21)
 

тоесть тупо так?

<?
$date
="2008.11.08";
$date2="2008.11.08";
 if (
$date>$date2) echo "Bolwe"; else echo "ne bol'we";
?>

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 19:48)   письмо автору
 
   для: sl1p   (11.08.2008 в 19:44)
 

Да.

  Ответить  
 
 автор: sl1p   (11.08.2008 в 19:51)   письмо автору
 
   для: BinLaden   (11.08.2008 в 19:48)
 

всем сенко)

  Ответить  
 
 автор: anpere   (01.10.2011 в 14:01)   письмо автору
 
   для: sl1p   (11.08.2008 в 19:44)
 

Главное не забывать, что дату 2011.9.1 надо писать как 2011.09.01
например
2011.9.1>2011.10.1 - т.е. неверный результат сравнения
2011.09.01<2011.10.01 - т.е. верный результат сравнения

  Ответить  
 
 автор: Keyses   (05.03.2009 в 13:01)   письмо автору
 
   для: sl1p   (11.08.2008 в 16:10)
 

Подскажите, а как правильно перевести дату из формата dd.mm.yyyy в формат yyyy.mm.dd, если исходная дата хранится в переменной $_POST.
Я так понимаю нужно грабить в цикле командой eregi до точки и записывать в пемеменные, а потом просто переставить их так как мне нужно. Верно или что-то не так?

  Ответить  
 
 автор: ols   (05.03.2009 в 13:09)   письмо автору
 
   для: Keyses   (05.03.2009 в 13:01)
 

Можно даже и без регулярок. explode например.

  Ответить  
 
 автор: Keyses   (05.03.2009 в 13:26)   письмо автору
 
   для: ols   (05.03.2009 в 13:09)
 

спасибо.

  Ответить  
 
 автор: blackcement   (27.12.2009 в 18:08)   письмо автору
 
   для: Keyses   (05.03.2009 в 13:26)
 

да

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования