【问题标题】:Show time in ET instead of EST or EDT以 ET 而非 EST 或 EDT 显示时间
【发布时间】:2012-06-15 19:09:25
【问题描述】:

我有一个小 sn-p 格式的时间戳,如下所示:(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;

【问题讨论】:

    标签: php datetime date time


    【解决方案1】:

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

    命名时区背后的全部原因是为了准确地表示当地时间。当当地在 DST 内时,将“标准”时间表示为当地时间在客观上是不正确的。在那个时区内读取时间的任何人都会被误导。

    如果您需要存储和处理忽略时区的日期和时间,请为此目的使用 UTC,即存储和普通数学。值得记住的是,即使是古老的 Unix 时间戳也是“UTC 时间 1970 年 1 月 1 日午夜过后的秒数”。

    如果您需要向用户表示本地时间,那么您应该允许他们选择他们的本地时区,并将其转换为显示。现代 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 时区,请结合各种时区 date() 格式查看 getTransitions 和 getOffset,尤其是我。您可以戳戳结果信息,以查找任何 DST 区域的“标准”版本下一次转换的时间并相应地进行调整。请记住,不同的区域在不同的时间过渡,并非所有区域的过渡量都相同……有些根本不过渡。我想有人已经提到过印第安纳州。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        $date = str_replace(array('EST', 'EDT'), 'ET', $date);
        

        【讨论】:

          猜你喜欢
          • 2019-04-09
          • 2011-11-12
          • 2014-05-18
          • 1970-01-01
          • 1970-01-01
          • 2019-04-25
          • 1970-01-01
          • 1970-01-01
          • 2013-05-21
          相关资源
          最近更新 更多