【问题标题】:Timezone offset PHP [duplicate]时区偏移PHP [重复]
【发布时间】:2018-10-17 13:18:42
【问题描述】:

如何在 php 中确定某个日期和时间(例如:2018-09-30 09:00:00)使用冬季时间还是夏季时间? 一旦我知道它是一个还是另一个,我如何在夏令时将日期添加 1 小时?

例子:

2018-08-10 08:00:00 --> 这是夏季时间,所以我需要添加 1 小时 --> 2018-08-10 09:00:00

2018-08-10 23:30:00 --> 添加 1 小时将是 2018-08-11 00:30:00(在这种情况下,日期会改变)

2018-12-12 08:00:00 --> 这是冬天,日期保持不变。

【问题讨论】:

  • 如果你只有一个像“2018-08-10 08:00:00”这样的字符串,那么那里根本就没有时区信息。您可以获得您的 PHP 环境当前使用的时区,但不清楚这是否是您所要求的。现在,也许您可​​以做出一些重大假设,并说 X 和 Y 之间的任何日期都是“夏令时”。如果你从你的字符串创建一个 DateTime 对象,那将很容易做到。

标签: php date


【解决方案1】:

日期格式 PHP 中有一个 I 格式字符,如果是夏令时(夏令时),则返回 1

$d1 = date('I', strtotime('2018-08-10 08:00:00'));
$d2 = date('I', strtotime('2018-08-10 23:30:00'));
$d3 = date('I', strtotime('2018-12-12 08:00:00'));

echo 'D1 is ' . ($d1?'summer':'winer') . 'time' . PHP_EOL;
echo 'D2 is ' . ($d2?'summer':'winer') . 'time' . PHP_EOL;
echo 'D3 is ' . ($d3?'summer':'winer') . 'time' . PHP_EOL;

输出:

D1 is summertime
D2 is summertime
D3 is winertime

工作代码:https://3v4l.org/DVjdn

然后你可以在需要的时候使用Datetime::add()方法增加一个小时。

【讨论】:

  • 不是批评,但我认为这使用美国夏令时,对吧?我相信英国会在几周之前或之后改变时间。不确定 OP 在哪里,但可能需要牢记。不错的答案,但不知道该格式选项:)
  • 这实际上不是帖子作者想要的。您的时间取决于服务器时区设置。并且根据服务器设置计算夏令时,而不是根据给定的日期时间字符串。
  • @PatrickQ 这取决于服务器的时区设置。为什么它取决于美国时间?美国是世界上某种特殊的地方吗? ;-)
  • @Sergej,当然这取决于服务器的时区。 OPs 日期时间字符串不包含时区信息,因此不存在 给定日期时间字符串的设置
  • @JakubMatczak 我是在问,不是在说。
猜你喜欢
  • 1970-01-01
  • 2013-07-11
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多