Php 以ET代替EST或EDT显示时间

Php 以ET代替EST或EDT显示时间,php,datetime,date,time,Php,Datetime,Date,Time,我有一个小片段将日期格式化为时间戳,如下所示:(YYYY-MM-ddh:M:st)Ex:2011-09-29 17:00:46东部标准时间或2011-09-29 17:00:46东部标准时间 我想将EST和EDT转换为ET并显示ET,这样用户就不用担心Dayligt的节省了。我该怎么做 $timeZone = new DateTimeZone('America/New_York'); $processedDate = str_replace(".000000"

我有一个小片段将日期格式化为时间戳,如下所示:
(YYYY-MM-ddh:M:st)Ex:2011-09-29 17:00:46东部标准时间或2011-09-29 17:00:46东部标准时间

我想将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;

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

命名时区背后的全部原因是为了准确地表示当地时间。当本地区位于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以及各种时区日期()格式的组合,尤其是我。您可以戳和戳结果信息,以查找任何DST区域的“标准”版本下一次转换的时间,并相应地进行调整。请记住,不同的地区在不同的时间过渡,并非所有地区的过渡量相同。。。有些根本就不过渡。我想已经有人提到印第安纳了


通常我也会在这里提供示例代码,但日期数学让我对暴力充满了永不满足的渴望。无论谁认为60、60、24、7、4-6、12和52是可以接受的思考时间和日期的方式,都是邪恶的,邪恶的人。谢天谢地,它们都已经死了几百年到几千年了。

没有一个时区叫ET——它要么是
EST(东部标准时间)
要么
EDT(东部夏时制)
。如果你想要东部时间没有夏令时,使用EST

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