Как обрабатывать дату ниже 1970 года в MongoDB

У меня есть документ с полем «День рождения», и это может также иметь значение ниже 01-01-1970. Как я могу справиться с этим? Например

{.... 'birthday' => newMongoDate(strtotime('31/10/1968')), .... } 

Это создает значение «день рождения»: «1/1/1970 12:00:00 AM» (DateTime)

Какую версию PHP вы используете? Я предполагаю PHP <5.1 на окнах? strtotime() должен иметь диапазон дат Fri, 13 Dec 1901 20:45:54 GMT и Tue, 19 января 2038 03:14:07 GMT с PHP 5.1 и более поздними версиями.

Для PHP 5.2 и выше вы можете использовать:

 $date = new DateTime('1 Jan 1950'); echo $date->format('Ym-d'); 

или,

 $date = DateTime::createFromFormat('d M Y','1 Jan 1950'); echo $date->format('Ym-d'); 

Это связано с тем, что временная метка UNIX идет с 1970 года ( http://php.net/manual/en/function.strtotime.php ), из которой следует значение strototime . Хотя strtotime может идти с 1901 года, отмечается, что:

Допустимый диапазон временной отметки – от Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (Это даты, которые соответствуют минимальным и максимальным значениям для 32-разрядного целого числа со знаком.) Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому ваш диапазон дат может быть ограничен не раньше, чем эпоха Unix. Это означает, что, например, даты до 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах. Однако PHP 5.1.0 и более новые версии преодолевают это ограничение.

Поэтому очень вероятно, что вы столкнулись с проблемой, когда ваша система просто не поддерживает дату до эпохи.

Вы можете сделать, как @nick говорит, и вместо этого использовать DateTime() , точнее собственную функцию timestamp : http://www.php.net/manual/en/datetime.gettimestamp.php

Единственный вариант, о котором я могу думать, – использовать вложенный объект Date что-то вроде

 birth_date : { year : 1968, month : 10, day : 31 } 

Конечно, будут проблемы, но это единственный вариант для пользователей Windows.