由 PHP 处理 DST 的时区
2022-08-30 18:22:52
我正在处理日历应用程序。在此,来自不同时区的用户创建/查看事件。我正在考虑遵循以下方法,以节省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's 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's timezone setting.
event_start_time_string_local is event's start time string in local/civil time.
event_start_timestamp_in_UTC is event's start time timestamp in UTC.
我的问题:
- 上面使用的 PHP API 是否负责所有区域的 DST?
- DST时间本身在不同年份发生变化,PHP如何获取有关此的信息?我们需要升级PHP吗?如果是这样,我们是否需要升级所有或特定的PHP库?
参考: - do-phps-date-default-timezone-set-adjust-to-daylight-saving - get-timezone-offset-for-a-given-location