PHP - DateTime - 以ET而不是EST或EDT显示时间

时间:2012-06-15 19:09:26

标签: php datetime date time

我有一个小片段,用于格式化时间戳的日期,如下所示:(YYYY-MM-DD H:M:S T ) Ex: 2011-09-29 17:00:46 EST or 2011-09-29 17:00:46 EDT

我想将EST和EDT转换为ET并显示ET,因此用户不必担心Dayligt的节省。我该怎么做?

    $timeZone = new DateTimeZone('America/New_York');
    $processedDate = str_replace(".000000", "", $timestamp);
    $dateTime = new DateTime($processedDate, new DateTimeZone('GMT'));
    $dateTime->setTimezone($timeZone);
    $processedDate = $dateTime->format('Y-m-d H:i:s') . ' ' . $dateTime->format('T');
    echo processedDate;

由于

3 个答案:

答案 0 :(得分:9)

你想要做的事情是不实际的,会导致你的用户讨厌你。

指定时区背后的全部原因是准确地表示当地时间。代表"标准"作为本地区域在DST内的当地时间的时间客观上是不正确的。在该时区内读取时间的任何人都会被误导。

如果您需要存储和处理忽略时区的日期和时间,则使用UTC进行此目的,即存储和普通数学。值得记住的是,即使是旧的Unix时间戳也是在1970年1月1日午夜过后的几秒钟,UTC"。

如果您需要表示用户本地的时间,那么您应该允许他们选择他们的本地时区,并在显示时进行转换。现代PHP的DateTime和DateTimeZone让这简单。从交互式提示中:

php > $utc = new DateTimeZone('UTC');
php > $amla = new DateTimeZone('America/Los_Angeles');
php >
php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);
php > $two_past_midnight->setTimeZone($amla);
php > echo $two_past_midnight->format('Y-m-d H:i:s');
2011-04-04 17:02:00

没有混乱,没有大惊小怪。当我们切换时区时,它为我们完成了数学计算。

另外,如果你真的,真的,真的想要缩小DST时区,请将getTransitions和getOffset与各种时区date()格式结合使用,尤其是我。您可以查看并生成结果信息,以查找"标准"任何DST区域的版本接下来转换并相应地进行调整。请记住,不同的区域在不同的时间过渡,并非所有区域都转换相同的数量......而有些区域根本没有过渡。我想有人已经提到了印第安纳州。

通常我也在这里提供示例代码,但是日期数学让我对暴力行为永不满足。无论谁决定60,60,24,7,4-6,6和52是可以接受的思考时间和日期的方式,都是邪恶的,邪恶的人。值得庆幸的是,他们已经死了几百到几千年。

答案 1 :(得分:1)

没有名为ET的时区 - 它是EST (Eastern Standard Time)EDT (Eastern Daylight Time)。如果您想要东部时间没有夏令时,请使用EST。

答案 2 :(得分:0)

$date = str_replace(array('EST', 'EDT'), 'ET', $date);