当前位置: 首页 > 知识库问答 >
问题:

用PHP处理DST的时区

帅令雪
2023-03-14

我正在做一个日历应用程序。在此中,来自不同时区的用户创建/查看事件。我想按照下面的方法将事件时间保存在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库吗?

参考文献:-does-phps-date-default-timezone-set-dition-to-daylight-save-get-timezone-offs-for-给定位置

共有1个答案

麻和雅
2023-03-14

你把事情搞得太复杂了。若要使用datetime在两个时区之间进行转换,请执行以下操作:

date_default_timezone_set('Asia/Kolkata'); // YOUR timezone, of the server

$date = new DateTime($input, new DateTimeZone('Asia/Tokyo')); // USER's timezone
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s');

这将从用户的本地时区转换为UTC。相反,要在用户的本地时间中显示时间,可以交换两个时区。

是的,PHP处理DST。必要的转换规则是PHP安装的一部分。您可以通过更新PHP或更新TimeZonedB来使它们保持最新。

 类似资料:
  • 我们的客户以文本文件的形式向我们发送以下格式的字符串形式的开始和结束日期时间 2019-10-07 11:07上午 所有日期时间都在一个时区内。我们计算开始日期和结束日期时间之间的差异来计算工作时间。当夏令时转换发生时,工时计算出错。他们没有提供足够的信息让我们正确计算。 我将建议他们向我们发送更多信息,以便我们能够解决这个问题。什么是好的解决方案?我们应该向他们推荐什么样的日期-时间格式,以帮助

  • 问题内容: 我正在考虑使用新的 Java 8 Date Time API 。我在Google上搜索了一下,发现jodaTime是Java的不错选择,但仍然对查看此新API的工作方式感兴趣。 我将所有时间存储在数据存储区中的UTC值中,并将根据用户的时区将其转换为本地时区特定的值。我可以找到许多文章,展示了如何使用新的Java Date Time API。但是我不确定API是否会处理DST更改?还是

  • 我只是想到了我解决每24小时运行一个任务的服务的方式,以及DST如何可能伤害它。 为了每天运行任务,我使用了System.线程。一个周期为24小时的计时器,像这样: 突然想到夏令时修正,我有三个想法: DST是无用的,我们应该把它扔掉 计时器处理得正确吗?我认为不管时钟是否改变,它都不会等待24小时。它只是等待指定的时间段,然后再次调用TimerCallback DST是无用的,我们真的应该摆脱它

  • 问题内容: 如何获取我的python脚本,以检查是否现在使用DST将特定时区存储在变量中?我的服务器设置为UTC。所以我说例如 我想运行有关现在是否正在使用DST的查询,并让返回的结果为true或false。 问题答案: 替代方法是使用: 可以具有以下三个值之一:没有DST,没有DST和未设置时区。

  • 本文向大家介绍PHP函数超时处理方法,包括了PHP函数超时处理方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP函数超时处理方法。分享给大家供大家参考,具体如下: register_shutdown_function Registers the function named by function to be executed when script processing is c