Уа! Datetime глючит с нулевым днем и месяцем ((

Духовность™

Продвинутый новичок
Уа! Datetime глючит с нулевым днем и месяцем ((

PHP:
$date = new Datetime('1992-00-00');
echo $date->format('Y-n-j'); // 1991-11-30
кака какой. почему так происходит?
 

zerkms

TDD infected
Команда форума
потому что первый месяц это январь, нулевой - это месяц перед ним, т.е. декабрь прошлого года. с днями - аналогично.
 

Духовность™

Продвинутый новичок
Мне нужно иметь возможность для mysql записывать дату в любом формате, ибо musql поддерживает удобный способ хранения:
для MySQL возможность хранить в столбцах DATE или DATETIME даты, в которых день или месяц равен нулю. Эта возможность особенно полезна для приложений, которые предполагают хранение даты рождения - здесь не всегда известен день или месяц рождения. В таких случаях дата хранится просто в виде 1999-00-00 или 1999-01-00
получается, для Datetime так же не умеет?((
 

akd

dive now, work later
Команда форума
а этого никто кроме мускула не умеет. может не стоит этого хотеть?
 

AmdY

Пью пиво
Команда форума
это и не правильно, ведь результат даже будет попадать в выборки.
храни в отдельных полях
 

AmdY

Пью пиво
Команда форума
допустим нужно сделать выборку по знаку зодиака, как правило это промежуток (Овен 21 марта — 20 апреля), соотвественно попадёт у нуль день.
 

Viktor_Rez

Новичок
Автор оригинала: triumvirat
Мне нужно иметь возможность для mysql записывать дату в любом формате, ибо musql поддерживает удобный способ хранения:
получается, для Datetime так же не умеет?((
Ты где это вычитал? http://dev.mysql.com/doc/refman/5.0/en/datetime.html приведи строку? Что то я не одупляю.

-~{}~ 24.09.10 22:19:

Автор оригинала: AmdY
допустим нужно сделать выборку по знаку зодиака, как правило это промежуток (Овен 21 марта — 20 апреля), соотвественно попадёт у нуль день.
Ну вот тебе зарплату платить в нуль день. Ок, устроит? =)
 

dimagolov

Новичок
мускль жжет:
[SQL]SELECT UNIX_TIMESTAMP( '2010-00-00' ) # 0
SELECT UNIX_TIMESTAMP( '2010-01-00' ) # 0
SELECT '2010-00-00' BETWEEN '2009-12-31 23:59:59' AND '2010-01-01 00:00:00' # 1
select '2010-00-00' BETWEEN '2010-01-01 00:00:00' AND '2010-01-01 00:00:01' # 0[/SQL]
как технически у них первое сочетается с третим и четвертым, мне не особо понятно
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
спасибо, поржал :) зачитывал вслух

-~{}~ 25.09.10 00:07:

не далее как сегодня вечером почти час обсуждал с клиентом, что postgres предпочтительна, а mysql недопустима для финансовых проектов, где критична предсказуемость, стабильность и целостность
 

LONGMAN

Dark Side of the Moon..
А в MySQL можно записать дату с микросекундамы? Хочу в бд запихнуть дату из формата 2010-09-25T16:45:30.572+04:00 а точность даты важно
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>мускль жжет:
Более того:
Код:
SELECT '2010-00-00' BETWEEN '2010-00-00 00:00' AND '2010-01-01 00:00:00';
  0

SELECT '2010-00-00' BETWEEN '2010-00-00' AND '2010-01-01';
1
таки по строкам!

-~{}~ 25.09.10 00:22:

Автор оригинала: LONGMAN
А в MySQL можно записать дату с микросекундамы? Хочу в бд запихнуть дату из формата 2010-09-25T16:45:30.572+04:00 а точность даты важно
http://www.mysql.ru/docs/man/DATETIME.html
 

fixxxer

К.О.
Партнер клуба
В strict mode (который я всегда включаю) мыскль себе таких вольностей не позволяет (и вообще ведет себя как взрослая СУБД ;)).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
zerkms
он чаще всего просто невозможен :)

на самом деле
Код:
SELECT CAST('2010-00-00' AS DATETIME) BETWEEN  CAST('2010-00-00 00:00' AS DATETIME) AND  CAST('2010-01-01' AS DATE);
дает 1, т.е. нужно явное приведение к дате
а
Код:
SELECT '2010-00-00' + interval 1 day;
дает null

т.е. нулевые даты - мнимые значения, которые обрабатываются по недокументированным правилам, напоминающим комплексную математику

а strict mode не влияет
sql_mode=STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
 
Сверху