Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2011, 12:27   #1
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию Как проще сравнивать даты?

день добрый!

есть необходимость сравнения дат из бд.

на данный момент формат такой - "год-месяц-день, часы:минуты".

знаю, что вроде как sql позволяет сравнивать даты со строками, но насколько это удобно?

изначально задача - подготовить массив данных для представления:

сделать выборку из базы, записать выборку в массив. отсортировать массив по возрастанию, где 1й элемент - наиболее ранняя дата (с учетом времени).

у меня есть 2 мысли:

1. перевести данные в UNIX формат и сравнивать числовые значения;
2. разнести даты на разные колонки, где отдельно будут стоять год, месяц, день, час, минута; - и сравнивать более сложными запросами отдельные колонки.

но можно оставить все и так как есть, если сравнение данных "как есть" возможно.

что скажете?
silvestr вне форума Ответить с цитированием
Старый 15.04.2011, 12:52   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

Зачем переводить? SQL отлично сравнивает даты в текстовом формате: 'yyyymmdd'
если и время нужно, то :'yyyymmddhhmmss'
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 15.04.2011, 13:09   #3
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

если я все правильно понял, результат работы следующего скрипта:

PHP код:
$date1 = ("2011-08-19, 21:33");
$date1 = ("2011-08-19, 16:40");

if (
$date1 $date2) {
     echo 
'true';
} else echo 
'false'
будет true?

add: MySQL

Последний раз редактировалось silvestr; 15.04.2011 в 13:12. Причина: add
silvestr вне форума Ответить с цитированием
Старый 15.04.2011, 13:38   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от silvestr Посмотреть сообщение
будет true?
Да. Но только не потому что одна дата больше другой, а потому что php будет сравнивать "несравнимое" причём до победного конца.

PHP код:
$date1 = ("2011-08-19, 21:33");
$date2 = ("2011-08-19, 16:40");

if (
$date1 $date2) {
     echo 
'true';
} else echo 
'false'
true
PHP код:
$date1 = ("2011-08-19, 21:33");
$date2 = ("2011-08-19, 56:40");

if (
$date1 $date2) {
     echo 
'true';
} else echo 
'false'
false

Ваша задача легко решается средствами MySql, при хранении даты в поле типа datetime.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 15.04.2011, 15:22   #5
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
Ваша задача легко решается средствами MySql, при хранении даты в поле типа datetime.
именно так и хранятся даты, только не понял о какой "легкости" речь? не могли бы пояснить? мне нужно в php обработать даты, хранящиеся в базе mysql в формате DATETIME.
silvestr вне форума Ответить с цитированием
Старый 15.04.2011, 16:19   #6
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

запрос вернёт уже отсортированный массив
Код:
SELECT * FROM test ORDER BY date;//date поле типа datetime
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 15.04.2011, 21:09   #7
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

эврика, благодарю
silvestr вне форума Ответить с цитированием
Старый 15.04.2011, 22:04   #8
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

а никто не сталкивался со скриптами проверки рассчитываемого времени на предмет перехода следующих суток, следующего дня, следующего года?

например есть событие, которое начнется в 23.00, будет длиться 2 часа.

значит закончится в 1.00 следующего дня, а следующий день может быть уже 1м числом следующего месяца, и даже следующим годом, если событие началось 31 дек.

погуглил, скорее всего вопрос не правильно задаю, не могу сформулировать.

add: или есть функции, как с UNIX-временем?
Код:
strtotime("+3 hours");
например:

PHP код:
 $timestamp '2010-12-31 22:11:10'
какое -то событие начинается в $timestamp, а заканчивается через 3 часа ровно. как видим, это будут не только следующие сутки, но и следующий месяц, и даже следующий год.

как быть в случае, если необходимо вычислить точное время окончания этого события, не плюсуя напрямую к часам +3, иначе получим 25 часов.

Последний раз редактировалось silvestr; 15.04.2011 в 22:48. Причина: add
silvestr вне форума Ответить с цитированием
Старый 15.04.2011, 23:01   #9
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

PHP код:
$q strtotime(" + 3 hours"$timestamp);
date('Y-m-d H:i:s'$q); 
как прибавить эти самые "+3 hours"?

Последний раз редактировалось silvestr; 16.04.2011 в 03:27.
silvestr вне форума Ответить с цитированием
Старый 16.04.2011, 14:40   #10
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

A non well formed numeric value encountered в функции

есть событие, которое запланировано на $date. тем не менее, у этого события не четкое время начала, а именно: $date - $minus, и продлится до $date непосредственно.
PHP код:
$minus = -3;
$plus 3;

$year 2011;
$month 4;
$day 16;
$hour 2;
$minute 0;

$date $year "-" $month "-" $day " " $hour ":".$minute ":00"
var_dump $date: string(16) "2011-4-16 2:0:00"

PHP код:
$date strtotime($killed_date); 
var_dump $date: int(1302904800)

PHP код:
$a date('Y-m-d H:i:s'$date); 
var_dump $a: string(19) "2011-04-16 02:00:00" // Пока все идет ок, мы получили дату отсчета.

PHP код:
$start date("Y-m-d H:i:s"strtotime($a " + $minus hours")); 
var_dump $start: string(19) "1970-01-01 03:00:00"


как видно опрерация выполняется (только не минусуется, а почему-то плюсуется, у $minus изначально отрицательное значение), но это прибавление, почему-то проходит к точке отсчета unix времени, а не к моей $date :/
silvestr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнивать строки в C# Cpluser Помощь студентам 1 13.03.2010 14:02
Разворачивающиеся меню. Как проще? Web-Gangsta JavaScript, Ajax 4 05.05.2009 17:46
как правильно сравнивать числа? codeok Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 29.10.2008 23:26
Как проще создать оконное приложение Mrloony Общие вопросы C/C++ 3 22.09.2008 00:00
Печать из memo как можно проще NecroSlider Общие вопросы Delphi 2 01.02.2008 22:22