【问题标题】:PHP - get time zone abbreviation including daytime savingPHP - 获取时区缩写,包括夏令时
【发布时间】:2017-04-11 02:19:05
【问题描述】:

PHP

$city = "Australia/NSW";
function get_timezone_abre()
{   
    global $city;
    $dateTime = new DateTime(); 
    $dateTime->setTimeZone(new DateTimeZone($city )); 
    return 'A'.$dateTime->format('T'); 
}

结果

AEST

不确定这是否会显示夏令时已经开始,有人可以澄清一下吗?

查看此链接,what-are-the-standard-timezone-abbreviations

有人可以提出更好的方法(包括夏令时)吗?

添加阅读材料

Australia DST timezone abbreviation incorrect when using date_default_timezone_set

  • 基于此,我假设我的缩写 EST 源自使用较旧的 php lib。

【问题讨论】:

  • 开头的A 是怎么回事?如果您只使用EST 作为您的时区,那么它不是使用Australia/NSW 时区,而是使用一些北美时区(东部标准时间)。您应该得到AESTAEDT,其中一个是标准时间,另一个是白天时间
  • 你为什么要在这里做一个全球性的?你不应该通过时区吗?如果您希望它始终默认为 Australia/NSW,那么您应该更新您的 php.ini 以设置默认时区,或者如果无法编辑 php.ini 或将 date_default_timezone_set('Australia/NSW'); 添加为代码中的第一行不受欢迎。
  • @Augwa 我可以用什么来找出为什么它不使用AESTAEDT?使用global是一种习惯,很难改哈哈,而且我也不知道它是在哪里声明的。
  • 可能是因为 $city 是别的东西。使用全局变量会降低代码的可预测性。 $dateTime->format('e'); 返回什么?我的猜测可能是America/New_York 或其他一些 EST 时区。

标签: php


【解决方案1】:

Australia/NSW 不是有效的时区标识符。澳大利亚的有效时区标识符为:

[299] => Australia/Adelaide
[300] => Australia/Brisbane
[301] => Australia/Broken_Hill
[302] => Australia/Currie
[303] => Australia/Darwin
[304] => Australia/Eucla
[305] => Australia/Hobart
[306] => Australia/Lindeman
[307] => Australia/Lord_Howe
[308] => Australia/Melbourne
[309] => Australia/Perth
[310] => Australia/Sydney

您可以使用DateTimeZone::listIdentifiers() 找到此列表(请参阅reference)。

Australia/NSW 是有效的,但这条评论 here 说它是为了向后兼容而包含在内的,可以删除。

这段代码应该做你需要的,它也考虑了夏令时的变化:

<?php
$city = "Australia/NSW";
$timezone = new DateTimeZone($city);
$date_time = new DateTime('now', $timezone);

echo $date_time->format('T') . PHP_EOL;
echo $date_time->modify('+6 months')->format('T');

这将输出:

AEST
AEDT

在这里演示:https://eval.in/772564

【讨论】:

  • 我尝试将默认时区设置为Australia/NSW,但城市的输出仍然是EST
  • 转换时区比这复杂得多。没用。
【解决方案2】:

试试这个。

date_default_timezone_set('Europe/Sofia');
echo date_default_timezone_get(); // Europe/Sofia
echo ' => '.date('T'); // => EET

【讨论】:

    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 2016-11-25
    • 2013-08-04
    • 1970-01-01
    • 2012-11-21
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多