[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: работа с датой в MySQL
Xakep
Добрый день.

Подскажите как правильно работать с датой в моем случае.

Например есть таблица (в столбце delivery - количество дней:

+------------------------+
| id | article | delivery |
+------------------------+

и в ней такая строка:

+-----------------------+
| 1 | DJ8344-DF3 | 3 |
+-----------------------+

мне нужно вывести дату которая будет через 3 дня.
т.е если сегодня 12.12.2013 то должно получиться 15.12.2013
формат даты должен быть таким ДД.ММ.ГГГГ
количество дней на которое нужно прибавить дату храниться в столбце delivery

проблема в том что там может быть и 0 дней а может и 180 дней

читал документацию и гуглил, нашел инфу про тип данных TIMESTAMP но так и не понял как все правильно реализовать. Хочу спросить у опытных людей как правильно все это сделать.
rooor
Цитата
нужно вывести дату

Цитата
нашел инфу про тип данных TIMESTAMP

Цитата
id | article | delivery

чего-то как-то намешано... нужно в БД хранить дату и её выводить? или в БД будет только количество дней?
если второе, то как вариант:
echo date('d.m.Y', strtotime('+'.$db_result['delivery'].'day');

или
echo date('d.m.Y', time() + $db_result['delivery'] * 86400);
Valick
rooor, учите SQL, грубо говоря там где есть БД, не должно быть РНР, забудьте саму мысль что вы знаете о существовании РНР, и решайте поставленные задачи средствами СУРБД.


Xakep, смените ник ;) до лучших времен))
такому нику необходимо соответсвовать ;)

SELECT NOW()+INTERVAL `delivery` DAY FROM `table`
SELECT DATE(NOW()+INTERVAL `delivery` DAY) FROM `table`
SELECT CURDATE()+INTERVAL `delivery` DAY FROM `table`




_____________
Стимулятор ~yoomoney - 41001303250491
rooor
тогда ещё DATE_FORMAT надо добавить.
Valick
rooor smile.gif


_____________
Стимулятор ~yoomoney - 41001303250491
Xakep
Цитата
Xakep, смените ник ;) до лучших времен))
такому нику необходимо соответсвовать ;)

:)
Ну собственно Xakep и PHP не связаны друг с другом...да и выбрал этот ник что в голову первое пришло :)

в общем ближе к теме...

Цитата
чего-то как-то намешано... нужно в БД хранить дату и её выводить? или в БД будет только количество дней?
если второе, то как вариант:


да, второе, вчера мне подсказали такой вариант:

$day = 3; //сколько дней прибавить
echo date("d.m.Y", (time()+3600*24*$day));


работает :)

но все равно это все не то, не правильно это как то...у СУБД есть свои конкретные функции с такими случаями...

а как быть если первый вариант?

Цитата

SELECT NOW()+INTERVAL `delivery` DAY FROM `table`
SELECT DATE(NOW()+INTERVAL `delivery` DAY) FROM `table`
SELECT CURDATE()+INTERVAL `delivery` DAY FROM `table`

похоже это что нужно...но есть пару вопросов

INTERVAL - это константа? или это просто переменная? она содержит секунды?

и чем отличаются каждая из трех строчек?
rooor
SELECT DATE_FORMAT((NOW()+INTERVAL `delivery` DAY), '%d.%m.%Y') FROM `table`

к текущей дате прибавить значение из поля `delivery`, в днях... и вывести в формате dd.mm.YYYY
Valick
INTERVAL - само названние это оператор SQL так же как и SELECT
она ничего не содержит
+ INTERVAL 3 DAY - прибавить три дня
+ INTERVAL `delivery` DAY - прибавить количество дней ( значение из поля `delivery`)

да и вообще....

_____________
Стимулятор ~yoomoney - 41001303250491
Xakep
о как, спасибо )

и такой еще вопрос
у меня в таблице хранится много записей и каждая из них имеет поле с датой добавления, формат даты дд.мм.гггг

как вывести все записи в диапазоне например месяца 13.11.2013 - 13.12.2013
или даже так 04.08.2013 - по сегодняшний день

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

и какой тип данных должен быть у даты...я читал что DATE и DATETIME подходят только для исторических дат, да и формат у нее убогий гггг.мм.дд чч.мм.сс , а TIMESTAMP для дат которые меняются...это так? и можно ли в TIMESTAMP записать дату формата дд.мм.гггг ?

P.S.: извините за назойливость, но просто хочу уже разобраться с этими датами
killer8080
Цитата (Xakep @ 13.12.2013 - 12:15)
и какой тип данных должен быть у даты...я читал что DATE и DATETIME подходят только для исторических дат, да и формат у нее убогий гггг.мм.дд чч.мм.сс , а TIMESTAMP для дат которые меняются...это так? и можно ли в TIMESTAMP записать дату формата дд.мм.гггг ?

DATE DATETIME применяется там, где даты выходят за пределы диапазона TIMESTAMP. Преимущество таймштампа в том, что он не зависит от часовых поясов.

Цитата (Xakep @ 13.12.2013 - 12:15)
как вывести все записи в диапазоне например месяца 13.11.2013 - 13.12.2013
или даже так 04.08.2013 - по сегодняшний день

операторы BETWEEN и сравнения <> в помощь.



Спустя 2 минуты, 21 секунда killer8080 написал(а):
Цитата (Xakep @ 13.12.2013 - 12:15)
у меня в таблице хранится много записей и каждая из них имеет поле с датой добавления, формат даты дд.мм.гггг

формат хранения тебя волновать не должен, дату форматируешь при выводе так, как нужно.
Xakep
все понял, спасибо. Всем +
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.