Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как работать с датами ранее 1970?
 
 автор: elenaki   (01.06.2007 в 12:03)   письмо автору
 
 

надо их хранить в базе, делать по ним поиск, т.е. сравнивать. а MySQL (или PHP? или Windows?)
не понимают дат (unixdate) до 1970. у меня база описаний древних текстов, года - от 1600 до
1910. неужели нет никаких способов обработки таких дат? не надо учитывать разные системы
летоисчисления. не надо учитывать високосные и обычные года. просто по запросу "с такого-го
года по такой-то" вывести соответсвующие записи.

   
 
 автор: Unkind   (01.06.2007 в 12:05)   письмо автору
 
   для: elenaki   (01.06.2007 в 12:03)
 


<?php
echo(date("d-m-Y H:i:s", -100000));
?>


P.S. А если просто года - то, в принципе, зачем UNIXTIMESTAMP вообще? Так года и записывайте..

   
 
 автор: elenaki   (01.06.2007 в 12:19)   письмо автору
 
   для: Unkind   (01.06.2007 в 12:05)
 

не просто год, а с определенного года (а может и дня с месяцем!) до определенного года (а
может и дня с месяцем). а ваш код пишет это:

Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in d:\localhost\www\php\tests\date.php on line 31

   
 
 автор: Loki   (01.06.2007 в 12:26)   письмо автору
 
   для: elenaki   (01.06.2007 в 12:19)
 

винда не умеет работать с отрицательными датами, а линукс - вполне.

   
 
 автор: Unkind   (01.06.2007 в 12:28)   письмо автору
 
   для: Loki   (01.06.2007 в 12:26)
 

У меня работает.

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

   
 
 автор: elenaki   (01.06.2007 в 13:16)   письмо автору
 
   для: Unkind   (01.06.2007 в 12:28)
 

непонятно, неужели я первая работаю с такими древними датами? поиск по теме ничего не
дал. в старой базе, из которой я импортирую данные, есть что-то похожее на метку времени.
отрицательное число или не слишком большое положительное. но у меня нет алгоритма
перевода 4018 в 31/12/1910. 31/12/1920 будет 7671, а 31/12/1900 уже будет 366... как можно
вытянуть зависимость? не считать же дни вручную?
Unkind, если не сложно - напишите мне эти даты в unixdate. a я найду разницу в секундах
между ними..

   
 
 автор: Unkind   (01.06.2007 в 13:29)   письмо автору
 
   для: elenaki   (01.06.2007 в 13:16)
 

Разница тут будет intval(((1910 - 1900) / 4) * 86400) + (1910 - 1900) * 365 * 86400 + 86400 = 315662400 секунд.

   
 
 автор: elenaki   (01.06.2007 в 13:30)   письмо автору
 
   для: elenaki   (01.06.2007 в 13:16)
 

======================================================
При всех переводах дней в года, месяцы и дни для смягчения погрешности вычисления таблица считает, что:

- в году 365,25 дней, т.е. (366+365+365+365)/4;

- в месяце 30.4375 дней, т.е. 365,25/12

не будет ли такая погрешность слишком велика? расстояния-то по времени немаленькие, 300-400 лет...

======================================================

а если разбить дату на 3 составляющие и хранить их в разных полях как целые числа? тогда
с ними можно будет любые действия производить... а проверять начинать с года. если год в
базе меньше, чем год, введенный пользователем - условие выполнено, сравниваем месяц,
если и месяц меньше - смотрим день. если все три условия выполнены - нас устраивает эта
запись, выводим ее, ищем другую. а? как? надо попробовать...

   
 
 автор: Trianon   (01.06.2007 в 15:43)   письмо автору
 
   для: elenaki   (01.06.2007 в 13:30)
 

не опирайтесь на unixtime
Опирайтесь на TO_DAYS() в MySQL
и на JDToGregorian() и GregorianToJD() в PHP.

Это ошибка программистов, портировавших функцию time под windows.
Концов тут не найти.
Майкрософт как всегда считает что прав он.
Определения posix говорят об обратном.
В результате нихрена не работает.

   
 
 автор: P@Sol   (01.06.2007 в 15:50)   письмо автору
 
   для: elenaki   (01.06.2007 в 12:03)
 

можно попробовать хранить в виде 20070601 :)

   
 
 автор: Trianon   (01.06.2007 в 16:09)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:50)
 

именно в таком виде их и хранит MySQL.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования