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

就解决方案:全球化截止时间的处理

  •  
  •   lbfeng · 2016-06-12 07:38:04 +08:00 · 2653 次点击
    这是一个创建于 2867 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设注册截止时间是北京 6 月 15 日 23:59 ,当北京是 6 月 16 日 2 时 00 分时已经过了截止时间,纽约是 6 月 15 日下午 2 时,不能注册了。纽约用户会抱怨,还没过截止时间。我也没办法直接在站上写截止时间是北京时间 6 月 15 日 23:59 ,因为不能让用户去换算出这是当地的几点。有什么办法能识别当地的时间并和 6 月 15 日 23:59 (无论哪个时区)这个时间作比较。

    后端 flask

    第 1 条附言  ·  2016-06-12 10:46:05 +08:00
    这个东西有点像 eventbrite 。用户 A 设置截止时间,比如 6 月 20 日,他不用多想,以自己的当地时间为准,假设地球上的其他人以各自的当地时间为准。用户 B 在地球另一端,差 12 个小时,拖延症患者,在当地 6 月 20 日 12 时后发现过了截止时间,觉得这他么不合理,找 A 手动把他添加进去, A 来找我,让我解决。

    在数据库里存的是 greenwich mean time 。对比时间是用的当时的 GMT 和截止时间 GMT 比的。
    15 条回复    2016-06-12 23:57:02 +08:00
    binux
        1
    binux  
       2016-06-12 07:43:53 +08:00
    为什么不能写「截止时间是北京时间 6 月 15 日 23:59 」?
    你用户群是哪个时区,就写哪个时区的时间,多个时区,就写多个主要时区的时间,有什么不可以?
    实在不行,写 UTC 也可以啊
    caizixian
        2
    caizixian  
       2016-06-12 07:48:17 +08:00 via Android
    还可以像 PSF 选票一样用 AOE

    https://en.m.wikipedia.org/wiki/Anywhere_on_Earth
    publicID002
        3
    publicID002  
       2016-06-12 08:59:49 +08:00 via Android
    可以用 js 直接帮用户换算成当地时间
    jhaohai
        4
    jhaohai  
       2016-06-12 09:36:10 +08:00 via iPhone
    直接用倒计时
    Mutoo
        5
    Mutoo  
       2016-06-12 09:38:14 +08:00
    前端 javascript 的 Date 默认使用的就是 local time ,提交到 server 的时候,将 timezone 一并提交。
    后端用预定好的时间 + timezone 构造 Date 实例作截止时间判断。
    just4test
        6
    just4test  
       2016-06-12 09:46:08 +08:00
    hahastudio
        7
    hahastudio  
       2016-06-12 10:06:42 +08:00 via Android
    你看这么多活动的截止时间都写 PDT ,也没见其他时区的用户抱怨不是= =
    BOYPT
        8
    BOYPT  
       2016-06-12 10:11:40 +08:00
    都是给服务商当地时间然后客户自己算的啊,平时国外网站优惠活动都是这样的。
    如果你的客户特别高贵,就为他专门算一个显示在页面上咯
    lbfeng
        9
    lbfeng  
    OP
       2016-06-12 10:22:45 +08:00
    @binux 一个美国人能马上把北京时间 6 月 15 日 23:59 换算成当地时间?我要考虑用户友好。
    pimin
        10
    pimin  
       2016-06-12 10:56:50 +08:00 via Android
    @lbfeng
    flask-moment 扩展
    dorentus
        11
    dorentus  
       2016-06-12 12:21:04 +08:00
    所以你想要实现的是下面这样?

    1. 用户 A (在东八区)设置了一个事件的截止时间为 6 月 15 日 23:59
    2. 用户 B (也在东八区)在北京时间 6 月 16 日 00:00 时来看,发现事件已经截止了
    3. 用户 C (在东七区),和 B 在同一个时间点来看,发现事件还没截止

    那么问题来了,这事件到底什么时候截止?
    假如我一台电脑用的是东九区的时间,另一台用的是东八区的时间,那么对于同一个事件,两边看到的状态不一样,这合理吗?

    ----

    正确的解决办法就应该是像上面大家说了的,在客户端 /前端把时间换成用户本地的时间显示,这样谁也不会弄错,再加个倒计时就更好了。
    yangff
        12
    yangff  
       2016-06-12 12:23:07 +08:00
    时间写 XX:XX UTC 然后加上这个链接 http://www.timeanddate.com/worldclock/
    mko0okmko0
        13
    mko0okmko0  
       2016-06-12 14:43:34 +08:00
    整个是概念与意图的问题.
    假设不使用 UTC/北京时间这样统一的截止时间.
    那就各目标区域各有各的截止时间.
    例如中文网页截止时间.英文网页截止时间.XX 语系的截止时间.
    或是从用户端的浏览器讯息 /IP 来判断用户在哪个时区.用该时区的截止时间.
    例如一个中文人士在美国.请问他该用哪个截止时间?在我看是应该用美国的.
    用户报名时.应该上传储存该用户的地区 /时区 /语系讯息.用于设计结始时间的考虑.
    jokie
        14
    jokie  
       2016-06-12 14:56:22 +08:00
    美国人访问的时候 换算一下时间 不行么
    lbfeng
        15
    lbfeng  
    OP
       2016-06-12 23:57:02 +08:00
    @dorentus 是这样的,用户 A 有自己的网站,据我调查都只显示一个截止日期比如 6 月 15 日,并没有标注时区,也没有时区转换表(这个部分我控制不了)。 A 的网站上有注册链接导到我这边来。假设其他用户只有在需要注册时才会到我这, 并且本能的认为 6 月 15 日是自己时区的 6 月 15 日(因为 A 的站里没有写明时区)。时区较晚的用户在本地 6 月 15 日较晚时注册会比较尴尬,因为前后价格可能会差几十至几百刀。用户 A 本身并不在乎一天内的差价,但希望能针对不同时区的用户只要当地还在 6 月 15 日内价钱就不变,主要是这一小撮用户回去联系 A ,认为这个不合理, A 觉得可以忽略时区差异。至于您假设的一个用户两台不同时区的电脑,由于可能性太低可以不用考虑。

    我的初衷是必须用户友好,不能让用户自己去换算时差。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3158 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:17 · PVG 21:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.