DateTimeZone 只处理一个方向的偏移量
DateTimeZone only handles offsets in one direction
我正在尝试检索不在 GMT 中的日期并将其转换为 GMT。为此,我创建了两个时区(一个 GMT 和一个非 GMT)并尝试获取它们之间的时差。然而,偏移仅在一个方向上是正确的。对于这个具体示例,我试图将 GMT +4 与 GMT 进行比较。当我将 GMT 时区与 GMT+4 时区进行比较时,我希望得到 4 小时(14400 秒),而当我将 GMT+4 时区与 GMT 进行比较时,我希望得到 -4 小时(-14400 秒)。但是,当比较后者时,我得到 0...这就是我所拥有的
$default_timezone = new DateTimeZone(drupal_get_user_timezone());
$default_reg_date = new DateTime($reg_date_string, $default_timezone);
$gmt_timezone = new DateTimeZone('UTC');
$gmt_reg_date = new DateTime($reg_date_string, $gmt_timezone);
// Returns as 14400
$default_gmt_offset = $default_timezone->getOffset($gmt_reg_date);
// Returns as 0
$gmt_default_offset = $gmt_timezone->getOffset($default_reg_date);
为什么我不能得到正确的号码,我做错了什么?检索偏移量是否只能以一种方式工作?
注意:在此特定示例中,drupal_get_user_timezone()
返回 GMT+4
This function returns the offset to GMT for the date/time specified in the datetime parameter. The GMT offset is calculated with the timezone information contained in the DateTimeZone object being used.
该函数使用 2 个逻辑步骤:
- 将日期转换为应用该函数的时区
- 获取与 GMT 的时差
因此在 new DateTimeZone('UTC')
上调用此函数将始终 returns 0
如果要将日期转换为 UTC,可以使用 setTimeZone
函数:
$date_string = '2020-05-01 09:11:00' ;
$date = new DateTime($date_string, new DateTimeZone('Europe/Brussels'));
echo $date->format('c') ; // 2020-05-01T09:11:00+02:00
$date->setTimeZone(new DateTimeZone('UTC'));
echo $date->format('c') ; // 2020-05-01T07:11:00+00:00
我正在尝试检索不在 GMT 中的日期并将其转换为 GMT。为此,我创建了两个时区(一个 GMT 和一个非 GMT)并尝试获取它们之间的时差。然而,偏移仅在一个方向上是正确的。对于这个具体示例,我试图将 GMT +4 与 GMT 进行比较。当我将 GMT 时区与 GMT+4 时区进行比较时,我希望得到 4 小时(14400 秒),而当我将 GMT+4 时区与 GMT 进行比较时,我希望得到 -4 小时(-14400 秒)。但是,当比较后者时,我得到 0...这就是我所拥有的
$default_timezone = new DateTimeZone(drupal_get_user_timezone());
$default_reg_date = new DateTime($reg_date_string, $default_timezone);
$gmt_timezone = new DateTimeZone('UTC');
$gmt_reg_date = new DateTime($reg_date_string, $gmt_timezone);
// Returns as 14400
$default_gmt_offset = $default_timezone->getOffset($gmt_reg_date);
// Returns as 0
$gmt_default_offset = $gmt_timezone->getOffset($default_reg_date);
为什么我不能得到正确的号码,我做错了什么?检索偏移量是否只能以一种方式工作?
注意:在此特定示例中,drupal_get_user_timezone()
返回 GMT+4
This function returns the offset to GMT for the date/time specified in the datetime parameter. The GMT offset is calculated with the timezone information contained in the DateTimeZone object being used.
该函数使用 2 个逻辑步骤:
- 将日期转换为应用该函数的时区
- 获取与 GMT 的时差
因此在 new DateTimeZone('UTC')
上调用此函数将始终 returns 0
如果要将日期转换为 UTC,可以使用 setTimeZone
函数:
$date_string = '2020-05-01 09:11:00' ;
$date = new DateTime($date_string, new DateTimeZone('Europe/Brussels'));
echo $date->format('c') ; // 2020-05-01T09:11:00+02:00
$date->setTimeZone(new DateTimeZone('UTC'));
echo $date->format('c') ; // 2020-05-01T07:11:00+00:00