Строка, о которой идет речь
2016-07-23T07:00:00.000Z
формат даты и времени W3C (W3C DTF) (Полная дата плюс часы, минуты, секунды и десятичные доли секунды), которые могут быть правильно проанализированы, в т.ч. доли секунды с помощью функции date_create_from_format
](http://php.net/date_create_from_format):
$originalDate = "2016-07-23T07:00:00.000Z";
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
Он создает новый DateTime, который затем можно отформатировать с помощью PHP стандартные коды, напр.
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
->format('Y-m-d H:i:s'); # 2016-07-23 07:00:00
Поскольку этот формат W3C уже содержит часовой пояс, и это UTC, и вы написали, что хотите другой, вам нужно указать его:
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
->setTimezone(new DateTimeZone('Asia/Tokyo'))
->format('Y-m-d H:i:s');
Причина, по которой это не видно (и не контролируется с помощью данного кода) в предыдущем ответе, заключается в том, что date
в соответствии с набором по умолчанию часовой пояс в PHP, где каждый DateTime имеет свой часовой пояс.
Тогда эквивалент с правильным разбором (включая десятичную долю секунды) с другими ответами:
$dateTime = date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
date('Y-m-d H:i:s', $dateTime->getTimestamp());
Надеюсь, это объясняет это немного лучше, если вам нужно полное значение даты и/или больше контроля над часовым поясом.
См. также формат: В каком формате находится эта строка даты?
person
hakre
schedule
21.06.2014