Мы разрабатываем API на PHP, MySQL, одно из полей которого возвращает дату и время в формате YYYY-MM-DD HH:MM:SS
, Этот API в самое ближайшее время может быть использован на разных континентах. В котором ISO
формат я должен сохранить свой datetime
что смещение времени тоже можно сохранить?
Это время делает работу? Или я должен использовать что-то вроде ISO 8601
?
Я также читал, что в PHP мы можем вернуть дату / время с помощью:
gmdate('Y-m-dTH:i:sZ');
Что ты предлагаешь? В каком формате я должен вернуть дату / время?
Когда вы имеете дело с датами, которые могут приходить из разных часовых поясов, вам нужно сохранить их как метку времени в MySQL. В этом случае становится неважным, откуда поступает информация (с какого континента). Это верно для сохранения данных. Теперь, когда дело доходит до отображения информации о дате для людей на разных континентах, вам нужно знать их часовой пояс. Использование PHP DateTime
, вы можете использовать метку времени из базы данных, связать ее с DateTimeZone
и показать правильное время для этого часового пояса.
Кроме того, когда вам нужно обмениваться данными между различными службами — предоставление метки времени позволяет целевому приложению применять любой диапазон часовых поясов для своих собственных целей форматирования. Тем не менее, все даты хранения должны быть без часового пояса. Вот почему временная метка играет здесь огромную полезную роль — это всегда UTC.
Теперь давайте предоставим некоторый код, чтобы он не стал общедоступным.
MySQL, timestamp
Тип данных хранит значение как целое число внутри, но отображает его как datetime.
$mysql_datetime = '2014-10-15 12:58:55'; // this is what you got from the database
$dt = DateTime::createFromFormat('Y-m-d H:i:s', $mysql_datetime); // Now you have the object which can manipulate dates
// Let's assume you have someone in New York who wants to see the date but formatted according to their time zone
$dt->setTimeZone(new DateTimeZone('America/New_York'));
echo $dt->format('Y.m.d, H:i:s'); // Format accepted is the same as for `date()` function.
Других решений пока нет …