【发布时间】:2017-02-24 03:43:20
【问题描述】:
正常情况下,正常一天有 1440 分钟(60 分钟/小时 * 24 小时)。但是,由于夏令时,可能有 1380 分钟(60 分钟/小时 * 23 小时)或 1500 分钟(60 分钟/小时 * 25 小时)。
当提供 php 的 DateTime 对象时,如何找到给定日期的确切分钟数?
例如,2016 年 3 月 13 日,DST 在美国开始(因此是一天 23 小时),而 2016 年 11 月 6 日,DST 在美国结束(因此是一天 25 小时)。 2016 年 5 月 1 日是一个正常的 24 小时日。我想要一个返回以下内容的函数:
$lomg= new DateTime('November 6, 2016T07:23:11');
$short= new DateTime('March 13, 2016T19:17:53');
$regular = new DateTime('May 1, 2016T22:45:00');
getMinutes($short); // Returns 1380
getMinutes($long); // Returns 1500
getMinutes($regular); // Returns 1440
【问题讨论】:
-
如果可以避免使用 unix 时间戳,那就不要使用它们了,因为它们都是基于 UTC 的;并开始使用实际上是时区感知的 DateTime 对象
-
使用
(bool)$dateTimeObject->format('I')可以知道 DST 当前是否生效。 -
unix 时间戳不包含任何时区数据。它是 UTC,没有 DST 设置。您应该在内部将时间(例如使用 php 中的 DateTime() 和 DateTimeZone() 类)转换为正确的时区,它会根据日期自动调整 DST 和时区偏移量。
-
DST starts in the US (and thus is a 25 hour day)- 呃,不,它是一天 23 小时:print (strtotime('14 March 2016')-strtotime('13 March 2016'))/3600(在正确设置您的时区之后)。而且你混淆了基准和区间。 -
你们都是对的,我把我原来的问题搞砸了。我确实在使用 DateTime 对象而不是时间戳。我相应地编辑了我的问题。很抱歉造成混乱。