PHP - 获取时区缩写,包括白天保存

时间:2017-04-11 02:19:06

标签: php

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。

2 个答案:

答案 0 :(得分:2)

澳大利亚/新南威尔士州不是有效的时区标识符。澳大利亚的有效时区标识符为:

[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

答案 1 :(得分:1)

试试这个。

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