【问题标题】:How can I change the timezone of a date string?如何更改日期字符串的时区?
【发布时间】:2015-08-24 06:00:33
【问题描述】:

我想更改如下时间的时区:

2015-08-24 01:30:40

所以它在America/Los_Angeles 时区,但下面的代码没有按预期工作:

$timedate = date_timezone_set(
              date_create_from_format('Y-m-d h:i:s A', $row[timezone]),
              new DateTimeZone('America/Los Angeles')
            );

$row[timezone] 自己成功返回2015-08-24 01:30:40,但是当我这样做尝试更改时区时,它不起作用。

之后的所有 PHP 代码都不会运行。我做了很多搜索,但我不知道如何让它正常工作,所以有人可以告诉我我做错了什么吗?

【问题讨论】:

    标签: php datetime timezone timestamp


    【解决方案1】:

    您对 date_create_from_format 的调用在格式字符串的末尾包含一个 A - 鉴于您的值不以 am 或 pm 结尾,这对我来说看起来很似是而非。您对h 的使用看起来也不太可能是正确的,因为这是针对一天中的 12 小时,当您没有上午/下午指示器时,这没有用。我怀疑你想要一种格式

    Y-m-d H:i:s
    

    这似乎更符合您的示例字符串...

    另外,如 cmets 中所述,您的时区 ID 应为 'America/Los_Angeles' 而不是 'America/Los Angeles'

    我还会将您在这一大行代码中的各种调用分开,以便更容易诊断 - 这样您就可以判断是解析失败了,而不是与时区有关。你在这里有三个独立的操作:

    • 将字符串解析为日期时间
    • 创建时区对象
    • 在 datetime 中设置时区

    将这三个放在单独的语句中将使代码更易于阅读和维护。 (特别是,您将能够独立地找到并纠正这两个问题......)

    【讨论】:

    • 很好的答案,但 OP 的时区无效。他必须用下划线更改LosAngeles 之间的空格。 (参见:php.net/manual/en/timezones.america.php
    • @Rizier123:谢谢,将添加第二个问题。
    • 哦,没看到。它仍然不是我想要的格式,因为当我在将其放入 MySQL 数据库之前创建时区时,我使用 Y-m-d h:i:s A 格式,但在 MySQL 数据库上,它是怎么回事作为 Y-m-d H:i:s.
    • 好吧,我把它分成了多个部分,不工作的部分是 date_create_from_format 部分。
    • 糟糕,我在输入完之前不小心保存了评论...date_create_from_format('Y-m-d H:i:s',$row[timestamp]); $timezone = new DateTimeZone('America/Los_Angeles'); $timedate = date_timezone_set($date, $timezone);我还意识到另一个错误。早些时候,我使用时区而不是时间戳作为数据库行的名称,所以我修复了它。
    猜你喜欢
    • 2012-03-20
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2023-04-05
    相关资源
    最近更新 更多