Про даты, помогите никак не разберусь

Cramac

Новичок
Про даты, помогите никак не разберусь

Привет всем. Облазил тут и что то не нашел что мне надо.
А надо сделать так:
Есть дата, текущая в MySQL установленная timestamp и имеет вид - 20041019223724
Есть разница, например 30 дней.
И два вопроса:
1. Как к дате вида - 20041019223724 прибавить сколько то дней?
2. Как выщитать разницу между двумя датами вида - 20041019223724 и получить разницу вида - ХХ дней ЧЧ часов ММ минут?
 

bool

Новичок
Я б использовал тот timestamp, который дает пхп и просто хранить в поле int.
Так проще, например 1093112331 + 30*24*60*60
 

SelenIT

IT-лунатик :)
bool, когда-то тут была основательная дискуссия насчет того, что лучше и надежнее. Лично я предпочитаю использовать встроенный механизм базы, хотя авторитетные противники у него тоже есть. Подводные камни есть в обоих вариантах, в частности, твой пример может легко споткнуться о переход на летнее/зимнее время.

Cramac, ответы на оба своих вопроса ищи здесь
 

Cramac

Новичок
ок. взгляну

-~{}~ 20.10.04 22:31:

Еще вопрос, я использую ADODB и SMARTY, так вот при выполнении запроса

$res= $db->Execute("SELECT DATE_ADD("20041020215430", INTERVAL 30 DAY)");

и передав в смарти
$smarty->assign("eтв", $res);

в смарти передается неимоверный массив ненужных данных. Можно ли от них избавится и брать только дату?
 

Фанат

oncle terrible
Команда форума
что-то это сообщение очень мало похоже на правду
 

Jok

Guest
ну ты погляди запрос сначала - он странный какой то ...
а на счет того что массив с ненужными элементами...

опишу на примере PEAR :: DB
метод Execute возвращает результат типа DB_RESULT в котором храняться вся служебная информация..
и чтобы получить то что ты запрашивал тебе нужно сделать что-то типа того

$res = $DB->Execute($query);
$entry = $res->fetchRow();

допустим что выбрало одну строку запросом....
тогда $entry будет вида

Array (1) (
[column_name] => 'Value'
)
удачи ....
 

Cramac

Новичок
Заимел я даты вот вышенаписанным способом и получил массив

$stop а в нем
Array (2)
0 => 2004-11-19 21:54:30
DATE_ADD(20041020215430, INTERVAL 30 DAY) => 2004-11-19 21:54:30

Как мне из текущей даты даты вычесть получившуюся чтоб получилось колличество дней, часов и минут до получившейся даты?

-~{}~ 21.10.04 20:10:

Пробовал так:
SELECT DATE_FORMAT('20051215235026' -now(), '%e.%c.%Y %T');
и не получается
 

Jok

Guest
SELECT NOW() - DATE_ADD(20041020215430, INTERVAL 30 DAY)
вот такой запрос вернет число оставшееся до даты....
естественно верент timestamp
его надо просто преобразовать в дату
 

Cramac

Новичок
Originally posted by Jok
SELECT NOW() - DATE_ADD(20041020215430, INTERVAL 30 DAY)
вот такой запрос вернет число оставшееся до даты....
естественно верент timestamp
его надо просто преобразовать в дату
Попробовал сделать так:
SELECT DATE_FORMAT(DATE_ADD(20041020215430, INTERVAL 30 DAY)-NOW(), '%e.%c.%Y %T');

Но выдает NULL

-~{}~ 22.10.04 19:52:

Пробую так:
$res= $db->Execute("SELECT DATE_ADD('20051020215430', INTERVAL 30 DAY)-NOW()");
$res = $res->fetchRow();

выдает 10097020382, но это в чем? Как перевести в дни, часы и минуты?
 

Фанат

oncle terrible
Команда форума
не представляю.
fetchRow() возвращает не массив, разве?
а в консоли не пробовал этот запрос запускать?
 

Cramac

Новичок
возвращает массив из двух элиментов, в одном значение, в другом полностью запрос. А в консоле не пробовал...

-~{}~ 22.10.04 22:09:

В консоле тоже самое выдает.

Может есть другой способ для работы с датами?

Мне надо знать дату добавления, дату+сколько то дней и разницу между ними.
 

Cramac

Новичок
А как тогда вычесть текущую дату?
Или как опредилить сколько времени осталось до указанной даты?

-~{}~ 22.10.04 22:51:

Вот так можно вычислить разницу в днях

TO_DAYS('20041025222222') - TO_DAYS(NOW())

-~{}~ 22.10.04 23:19:

Раз с запросами к базе не получаетс разобратся, подскажите тогда в таком варианте:

$a= time();
инсерт в базу

потом из базы берем $a
$b=$a+3*60*60*24; //прибаляем 3 дня
$c=$b-time(); // берем разница в сек. между тек. и полученной датой.

Правильно ли так будет?
 

Jok

Guest
я же тебе писал как сделать
пишу еще раз
SELECT NOW() - DATE_ADD(20041020215430, INTERVAL 30 DAY)
возвращает отрицатеьлно число...
смени знак.. вот тебе таймстемп :)
юзай как хочешь :))
100% работает :)
что тут думать ?
 

Фанат

oncle terrible
Команда форума
и так и так будет правильно.
можно в формат() time переводить в запросе.
меня больше волнует вопрос, зачем тебе в базе поле Timestamp

-~{}~ 22.10.04 23:30:

Jok
ты совсем тупой?
С какого перепугу этот бред тебе возвратит "таймстемп"
Ты сам-то пробовал "юзать" свой "100% рабочий" бред сивой кобылы?
 
Сверху