Я работаю над проектом, где пользователь может ввести дату и время, я что-то вычисляю из него, и я хочу сохранить его в базе данных.Преобразование DateTime в Unix и обратно
Потому что MySql
может хранить дату и время только от 1000-01-01
, тогда кажется хорошей идеей хранить его в метке времени.
Теперь, я хочу проверить, могу ли я создать объект DateTime
, получить временную метку и попытаться преобразовать ее обратно.
$UtcTime = \DateTime::createFromFormat("Y-m-d H:i:s", '0-01-01 00:00:00', new \DateTimeZone('UTC'));
var_dump($UtcTime);
var_dump($UtcTime->format('U'));
var_dump(\DateTime::createFromFormat('U', $UtcTime->format('U'), new \DateTimeZone('UTC')));
Выход заключается в следующем:
object(DateTime)[8]
public 'date' => string '0000-01-01 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
string '-62167219200' (length=12)
boolean false
Я пытался использовать createFromFormat('-U'...
, но не помогло. Может кто-нибудь сказать мне, что мне не хватает, когда я хочу его вернуть?
UPDATE
Хорошо, теперь я проверил другую тему, и попытался это:
$dt = new \DateTime();
$dt->setTimestamp($UtcTime->format('U')); //<--- Pass a UNIX TimeStamp
var_dump($dt->format('Y-m-d H:i:s'));
И получите: 1905-06-06 19:35:44
что не 0000-01-01 00:00:00
UPDATE2
Я попытался поиграть с этим, и Я проверил его с более близкими датами до сих пор.
1782-01-01 00:00:00
1918-02-08 07:28:16
с TS -5932656000
.
Так что я проверил руководство:
До PHP 5.1.0, не все платформы поддерживают отрицательные временные метки, поэтому диапазон дат может быть ограничен не ранее эпохи Unix. Это означает, что, например, даты до 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах.
Я работаю на локальном хосте с этим:
- для Windows 10 Enterprise N 64-разрядные
- Apache 2.4.4 64bit
- PHP 5.6.5 64bit
Когда я выгрузите его в наш linux box, у меня есть подходящее время.
Вы хотите использовать даты до года 1000? Вероятно, вы найдете очень плохую или воинственную поддержку для всего этого, так как даты точно не были точно прибиты. – deceze
секунд - это всего лишь секунды до BC. Это проект астрологии, и что, если я хочу знать что-то о Гомерусе? – vaso123
что не так с native 'strtotime'? –