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

PHP夏时制难题

壤驷俊逸
2023-03-14

我有一个使用jquery FullCalendar构建的日历应用程序。用户查看他们本地时区中的事件,我的服务器将它们存储为MySQL中的UTC日期时间。(关于stackoverflow的其他问题表明,这是处理时区的最佳方法。)因此,每次用户在日历上保存或查看事件时都会进行转换。这很好,但我对如何最好地处理夏令时感到困惑。

例如,假设timezone EST(东部标准时间)中的一个用户在不是夏时制的情况下创建了一个每天重复的下午3点的事件。我的PHP代码使用标准的DateTime(和DateTimeZone)类在UTC-5:00之前在UTC和EST之间进行转换。当夏时制处于活动状态时,时钟提前一小时,PHP将在UTC-4:00之前在UTC和EST之间转换。从用户的角度来看,事件然后从原来的3pm转移到4pm。这不是我和我的用户想要的。无论夏令时如何,下午3点的活动都应该保持为下午3点的活动。最好的处理办法是什么?PHP中有没有忽略夏时制的方法?

我的代码

$getDate = new DateTime($storedDate, new DateTimeZone('UTC'));
$getDate->setTimezone(new DateTimeZone('America/New_York'));
$getDateString = $getDate->format('Y-m-d H:i:s');

共有1个答案

乐正浩博
2023-03-14

您是否尝试过查看DateTimeZone::GetTransitions()?

http://www.php.net/manual/en/datetimezone.gettransitions.php

特别是使用[offset]和[isdst]属性。

    null
 类似资料:
  • 问题内容: 我需要在当地时间上午9:00向世界各地的用户发送电子邮件。该服务器在英国。我所能做的是在每个用户和服务器时间之间设置一个时差,如果不存在DST,则可以完美地工作。 这是一个示例来说明它: John在纽约工作,比服务器(英国)时间早-5个小时 Richard在英国伦敦工作,因此与服务器的时差为0小时。 当服务器在某个星期日的凌晨2:00从GMT转到GMT +1(BST)时,这意味着Joh

  • 我在我的webapp中有一些本地化功能(通过Ajax公开),使用户能够在他们自己的时区以及与数据主要相关的实体位置相关的时区中显示一些日期时间信息。 > 输入值25/11/2018 16:00 NZDT(太平洋/奥克兰)=UTC+13 产值应为25/11/2018 14:00 ADT(澳大利亚/悉尼)=UTC+11 如果我从数据库中提取源值,然后进行转换,那么计算工作正常,没有问题 如果我使用表单

  • 在美国,有诸如和这样的时区,在夏时制期间,它们是和,而当夏时制不生效时,它们是和。 那么,既然夏令时从3月的第二个星期日开始,到11月的第一个星期日结束,那么说3月到11月之间的日期是在还是是无效的吗?例如,以下日期在技术上是否不存在? 它不应该是,还是仅仅是,以避免必须指定或?

  • 轻触方格启用设定,即可将夏令时反映于时间显示中。

  • 问题内容: 中欧夏令时开始于三月的最后一个星期日。我们将时钟设置为02:00到03:00。如果我在数据库请求中进行时间戳计算会发生什么?比方说,在01:59? 结果是03:00还是02:00? 如果我们将时钟设置为03:00到02:00,那结束了呢? 时间从03:00更改为02:00之后…在02:00会发生什么?是02:59还是01:59? 应该如何处理?最佳实践以及Oracle Database

  • 在我的网站中,用户A创建了一个从上午9:00开始的事件。我将该时间转换为GMT,这样,如果用户B在两小时前的不同时区看到该事件,它可以转换为用户B的时区,并显示该事件在11:00AM开始。 我唯一的想法是,当我得到如下所示的时区偏移量时,我是否应该总是将日期设置为一月,以便无论实际月份如何,我总是得到相同的时区偏移量?或者有没有更好的方法来处理这件事?