Добрый день.
Подскажите как правильно работать с датой в моем случае.
Например есть таблица (в столбце delivery - количество дней:
+------------------------+
| id | article | delivery |
+------------------------+
и в ней такая строка:
+-----------------------+
| 1 | DJ8344-DF3 | 3 |
+-----------------------+
мне нужно вывести дату которая будет через 3 дня.
т.е если сегодня 12.12.2013 то должно получиться 15.12.2013
формат даты должен быть таким ДД.ММ.ГГГГ
количество дней на которое нужно прибавить дату храниться в столбце delivery
проблема в том что там может быть и 0 дней а может и 180 дней
читал документацию и гуглил, нашел инфу про тип данных TIMESTAMP но так и не понял как все правильно реализовать. Хочу спросить у опытных людей как правильно все это сделать.
Цитата |
нужно вывести дату |
Цитата |
нашел инфу про тип данных 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
12.12.2013 - 22:24
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
тогда ещё DATE_FORMAT надо добавить.
Valick
12.12.2013 - 22:59
Цитата |
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 - это константа? или это просто переменная? она содержит секунды?
и чем отличаются каждая из трех строчек?
SELECT DATE_FORMAT((NOW()+INTERVAL `delivery` DAY), '%d.%m.%Y') FROM `table`
к текущей дате прибавить значение из поля `delivery`, в днях... и вывести в формате dd.mm.YYYY
Valick
13.12.2013 - 13:40
INTERVAL - само названние это оператор SQL так же как и SELECT
она ничего не содержит
+ INTERVAL 3 DAY - прибавить три дня
+ INTERVAL `delivery` DAY - прибавить количество дней ( значение из поля `delivery`)
да и вообще....
_____________
Стимулятор ~yoomoney - 41001303250491
о как, спасибо )
и такой еще вопрос
у меня в таблице хранится много записей и каждая из них имеет поле с датой добавления, формат даты дд.мм.гггг
как вывести все записи в диапазоне например месяца 13.11.2013 - 13.12.2013
или даже так 04.08.2013 - по сегодняшний день
мне нужно будет показать записи за неделю, за месяц, за квартал, за год
+ случайный период выбранный пользователем
и какой тип данных должен быть у даты...я читал что DATE и DATETIME подходят только для исторических дат, да и формат у нее убогий гггг.мм.дд чч.мм.сс , а TIMESTAMP для дат которые меняются...это так? и можно ли в TIMESTAMP записать дату формата дд.мм.гггг ?
P.S.: извините за назойливость, но просто хочу уже разобраться с этими датами
killer8080
13.12.2013 - 14:57
Цитата (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) |
у меня в таблице хранится много записей и каждая из них имеет поле с датой добавления, формат даты дд.мм.гггг |
формат хранения тебя волновать не должен, дату форматируешь при выводе так, как нужно.
все понял, спасибо. Всем +
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.