Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сравнение дат без учета дней месяца

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Bio man
Отправлено: 30 Декабря, 2012 - 14:33:50
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Как сравнить дату? Например, нужно что то типо такого
CODE (SQL):
скопировать код в буфер обмена
  1. '2012-12' BETWEEN `date1` AND `date2`
 
 Top
EuGen Администратор
Отправлено: 30 Декабря, 2012 - 15:00:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. WHERE YEAR(`field`)=2012 AND (MONTH(`field`) BETWEEN MONTH($date1) AND MONTH($date2))

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Bio man
Отправлено: 30 Декабря, 2012 - 16:40:27
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Но если $date1 2012 год а $date2 2013? тогда получится `month` BETWEEN 12 AND 1 и ничего не сработает...
 
 Top
EuGen Администратор
Отправлено: 30 Декабря, 2012 - 16:45:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Bio man
Отправлено: 02 Января, 2013 - 13:04:29
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Вопрос. Есть unix timestamp, который в нормальном виде выглядит, например, так 2013.01.02.
Нужно сделать, что бы это превратилось в 2013.01.01 и 2013.01.31
Сделать нужно с помощью sql
(Добавление)
Начальную дату можно руками подправить, меня больше интересует конечная дата.
 
 Top
Саныч
Отправлено: 02 Января, 2013 - 13:28:59
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT (`date` - INTERVAL DATE_FORMAT( `date` , "%e %H:%i:%s" ) DAY_SECOND + INTERVAL 1 DAY) AS mStart, (`date` - INTERVAL DATE_FORMAT( `date` , "%e %H:%i:%s" ) DAY_SECOND + INTERVAL 1 MONTH) AS mEnd FROM `tbl`
???


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
KingStar
Отправлено: 02 Января, 2013 - 13:30:15
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3. SELECT
  4.    LAST_DAY(`date`) + INTERVAL 1 DAY - INTERVAL 1 MONTH AS `date_start`,
  5.    LAST_DAY(`date`) AS `date_end`
  6. FROM `table`
  7.  
  8.  

(Отредактировано автором: 02 Января, 2013 - 13:38:00)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
Bio man
Отправлено: 02 Января, 2013 - 13:37:02
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Вот что у самого получилось
CODE (SQL):
скопировать код в буфер обмена
  1. DATE_ADD(DATE_ADD(DATE_FORMAT(DATE(FROM_UNIXTIME(`ts`.`date_from`)), '%Y-%m-01'), INTERVAL 1 MONTH), INTERVAL -1 DAY)


KingStar, спасибо, вроде самый простой вариант. Буду тестить.
 
 Top
Саныч
Отправлено: 02 Января, 2013 - 13:42:50
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Не знал про LAST_DAY. Нужно чаще в мануал заглядывать.

Интересно как-то, LAST_DAY есть, а FIRST_DAY нету... Однако


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Мелкий Супермодератор
Отправлено: 02 Января, 2013 - 13:59:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Саныч пишет:
а FIRST_DAY нету...

А там разве есть варианты?


-----
PostgreSQL DBA
 
 Top
Саныч
Отправлено: 02 Января, 2013 - 14:05:48
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Мелкий, нету, но просто по логике, если есть что-то LAST, то должно быть и FIRST Улыбка

Еще короче вариант:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.    DATE_FORMAT(`date`, "%Y-%m-01") AS `date_start`,
  3.    LAST_DAY(`date`) AS `date_end`
  4. FROM `table`


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB