Я работаю над календарным приложением. В этом случае пользователи из разных часовых поясов создают/видят события. Я собираюсь следовать ниже, чтобы сохранить время события в UTC и отображать их в локальное время пользователя. Примечание: у пользователя есть предпочтительная настройка часового пояса.
Чтобы сохранить время запуска события как метку времени UTC:
$timezone = new DateTimeZone( $user_timezone_name );
$utcOffset = $timezone->getOffset( new DateTime( $event_start_time_string_local ) );
$event_start_timestamp_local = maketime( $event_start_time_string_local );
//Now add/subtract $utcOffset to/from $event_start_timestamp_local to get event start //time timestamp in UTC and save this result in DB.
Чтобы получить время начала события в пользовательском часовом поясе:
date_default_timezone_set( $user_timezone_name );
$eventTimeLocalTime = date("Y-m-d H:i:s", $event_start_timestamp_in_UTC );
Где:
user_timezone_name is user timezone setting.
event_start_time_string_local is event start time string in local/civil time.
event_start_timestamp_in_UTC is event start time timestamp in UTC.
Мои вопросы:
- Используются ли выше используемые API-интерфейсы PHP для DST для всех регионов?
- Время DST само изменяется в разные годы, как PHP получает информацию об этом? нам нужно обновить PHP? Если это так, нам нужно обновить всю или определенную библиотеку PHP?
Литература: - does-phps-date-default-timezone-set-adjust-to-daylight-saving - get-timezone-offset-for-a-given-location