V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lovecy
V2EX  ›  问与答

一个 PHP 时区问题

  •  
  •   lovecy · 2020-08-10 16:33:28 +08:00 · 1307 次点击
    这是一个创建于 1566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问下 V 友们关于海外业务,服务器时区一般是跟随机器时区,还是程序内配置? 另外 PHP 提供了好多地区的时区配置,不知道有什么区别 例如Asia/ShanghaiEtc/GMT-8好像都表示东八区,但又找不到我们平时说的+08:00这样的表示

    9 条回复    2020-08-12 19:39:46 +08:00
    chotow
        1
    chotow  
       2020-08-10 17:12:02 +08:00   ❤️ 1
    - Asia/Shanghai 和 Etc/GMT-8 属于 TZ 数据库( TZ database )的写法
    - +08:00 是 ISO 8601 中时区的写法

    前者常在设置的时候使用,后者常在展示的时候使用。
    (个人观点,欢迎指教)

    php 中 TZ 的配置项:
    https://www.php.net/manual/en/timezones.php

    对于中国大陆来说,标准写法是 Asia/Shanghai ;而 PRC 、Etc/GMT-8 是向后兼容的写法,php 官方并不推荐。
    lovecy
        2
    lovecy  
    OP
       2020-08-10 17:34:58 +08:00
    @chotow 主要是可能一个服务器面向多个地区提供服务,这种情况是不是按服务器所在地的时区来就好了,比如泰国和越南是同个时区,服务器在越南就用`Asia/Ho_Chi_Minh`,在泰国就用`Asia/Bangkok`。
    lovecy
        3
    lovecy  
    OP
       2020-08-10 17:37:19 +08:00
    使用指定地区的时区,是不是可以自动适配当地的时间政策,比如夏令时之类的骚操作
    sujin190
        4
    sujin190  
       2020-08-10 18:14:12 +08:00
    @lovecy #2 一般来说,正确做法应该是服务器保存就带了时区,返回前端时候带上时区格式化,现实到页面上的时候在 format 到本地时区,那么这时候服务器保存的啥时区似乎不重要,重要的是显示的时候要格式化成本地时区,mysql 这种不支持时区的可以选择一个固定时区在输出的时候加进去就行了
    sujin190
        5
    sujin190  
       2020-08-10 18:16:01 +08:00
    @chotow #1 php 的 Asia/Shanghai 和 Etc/GMT-8 完全是一样的,但是把 python 的 datetime 就差了几分钟,然后被这个问题坑到死啊,后来就只用 Etc/GMT-8 了
    lovecy
        6
    lovecy  
    OP
       2020-08-12 17:44:49 +08:00
    @sujin190 因为旧项目在源码配置写死了 Asia/Shanghai,这个已经改不了了,所以只能手动配置服务端时区了。
    话说我很好奇,为啥只有 Asia/Shanghai,没有 Asia/Beijing,我们平时不都说北京时间么。另外 python 的这两个时区时间不一致,是根据的标准不同导致的么。。
    sujin190
        7
    sujin190  
       2020-08-12 18:32:05 +08:00
    @lovecy 估计不是,北京时间按定义应该是东八区时间,但是吧每个时区似乎是又可以细分的,上海其实不完全在东八区起始位置,所以应该 python 是用了细分后的时区,但是吧数学上也许看起来更严谨现实来说就很坑人了
    lovecy
        8
    lovecy  
    OP
       2020-08-12 19:32:10 +08:00
    @sujin190 嗯,我就感觉 Asia/Shanghai, Asia/Hong_Kong 这种,应该都是指本地的时间,然后可能有些规范规定了本地时间和所在时区时间一致,这样子。感觉数学计算,还是获取 timestamp 之后,再来算会好一点,毕竟所有地方的 timestamp 都是一致的
    lovecy
        9
    lovecy  
    OP
       2020-08-12 19:39:46 +08:00
    @sujin190 话说按你这个说法,用 Etc/GMT-8 好像更好一点,但是 php 官方已经标记为过时了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2824 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:24 · PVG 22:24 · LAX 06:24 · JFK 09:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.