首页 > 解决方案 > 将 UTC0 更改为 UTC +1/+2

问题描述

我从我的 SQL 数据库中得到了一个时间戳:$DBdata = '2019-10-10 12:25:59',这个日期是UTC+0。好吧,我住在丹麦,我们有以下 UTC。

中欧时间冬季(UTC+1)

中欧夏令时(UTC+2)

这些 UTC 每年从夏季到冬季不同日期的变化。

夏季时间

• 2019 - 3 月 30 日星期六至 3 月 31 日星期日之间的夜晚

• 2020 - 3 月 28 日星期六至 3 月 29 日星期日之间的夜晚

• 2021 年 - 3 月 27 日星期六和 3 月 28 日星期日之间的夜晚

• 2022 - 3 月 26 日星期六和 3 月 27 日星期日之间的夜晚

• 2023 - 3 月 25 日星期六和 3 月 26 日星期日之间的夜晚

冬季时间

• 2019 年 - 10 月 26 日星期六和 10 月 27 日星期日之间的夜晚

• 2020 - 10 月 24 日星期六和 10 月 25 日星期日之间的夜晚

• 2021 年 - 10 月 30 日星期六和 10 月 31 日星期日之间的夜晚

• 2022 - 10 月 29 日星期六至 10 月 30 日星期日之间的夜晚

• 2023 - 10 月 28 日星期六至 10 月 29 日星期日之间的夜晚

是否可以使用正确的 +1/+2 做出改变这些 UTC 的 if 语句?也许是这样的:

$Winter= gmdate('Y-m-d H:i:s', strtotime("WinterUTC"));
$Summer= gmdate('Y-m-d H:i:s', strtotime("SummerUTC"));

if (($$DBdata>= $Winter) && ($$DBdata<= $Summer)){
    $gmt_dateWinter = gmdate('Y-m-d H:i:s', strtotime($date + '+ 2 hours') );
}else{
    $gmt_dateSummer = gmdate('Y-m-d H:i:s', strtotime($date + '+ 1 hours') ); 
}

我不知道这是否是一个聪明的方法。如果有另一种更聪明的方法,请引导我走向另一个方向。

谢谢!

标签: php

解决方案


您可以使用gmdateanddate("I")生成考虑时区的日期:

gmdate:格式化 GMT/UTC 日期/时间

$DBdata = '2019-10-10 12:25:59';
$timezone  = +2; // (GMT +2:00) CEST (European Summer Time)
$GMdate = gmdate("Y-m-d H:i:s", strtotime($DBdata) + 3600*($timezone + date("I")));
echo $GMdate;

返回:

2019-10-10 22:25:59

date文档中:

I(大写 i)日期是否为夏令时:1 如果是夏令时,0否则。


推荐阅读