时间戳的格式化工作应该由谁(前端/后端/数据库)来完成? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iugo
V2EX    程序员

时间戳的格式化工作应该由谁(前端/后端/数据库)来完成?

  •  
  •   iugo
    iugo 2017-02-06 17:12:25 +08:00 7298 次点击
    这是一个创建于 3224 天前的主题,其中的信息可能已经有所发展或是发生改变。
    答案可能不是绝对的, 请大家依据不同项目情况分享下自己的经验.

    针对一个 Web 项目, 数据库(PostgreSQL)储存时间戳的时候, 有人用 bigint, 有人用 timestamp.

    1. bigint
    时间戳由后端(Node.js)生成, 填入数据库.
    用的时候由前端 /后端来格式化.
    时间戳为精确到毫秒的整数型, 前后端处理起来比较一致. 数据库想要操作可以用 to_char().

    2. timestamp
    时间戳由数据库生成.
    用的时候由数据库格式化或数据库格式为 UNIX 时间戳(可额外携带精度)交给前后端格式化.
    timestamp 可选精度值.
    想要输出 Javascript 的时间戳 SQL 比较嗦, 比如 (EXTRACT(EPOCH FROM add_time) * 1000)::bigint

    在数据库有余力的情况下, 我目前的做法是数据库存为 timestamp, 输出 Javascript 格式的时间戳, 由前端格式化.
    12 条回复    2017-02-07 21:36:35 +08:00
    jingniao
        1
    jingniao  
       2017-02-06 17:30:07 +08:00
    目前都是 int 类型的时间戳,转换大部分是在返回给前端的时候做下,也偶尔让前端自己转
    主要是清晰,如果用数据库自带的 timestamp ,在转换的时候有时候会晕,本地时间, utc 时间,还有时区问题,所以我宁愿存储成 unix 样式的时间戳。
    hheedat
        2
    hheedat  
       2017-02-06 17:35:03 +08:00
    时间戳格式化应该由前端完成,前端根据设计自行决定显示的格式
    gzb001
        3
    gzb001  
       2017-02-06 17:49:23 +08:00
    支持 @hheedat 的说法,前台页面对于时间展示的格式要求多变,由前端进行处理,可以灵活一点。
    gamexg
        4
    gamexg  
       2017-02-06 18:30:31 +08:00
    @hheedat +1 XX 秒前 XX 时区,还是前端方便。
    wizardforcel
        5
    wizardforcel  
       2017-02-06 18:33:10 +08:00 via Android
    前端
    learnshare
        6
    learnshare  
       2017-02-06 19:35:51 +08:00 via Android
    展示端格式化,传输和计算都尽量保证统一的格式,比如用毫秒值
    owt5008137
        7
    owt5008137  
       2017-02-07 09:08:47 +08:00 via Android
    unix 时间戳兼容性最高哇,毫秒时间戳支持的语言并不多。逻辑时间操作一般直接用 UTC 时间戳,避免时区和闰秒问题。显示部分当然谁要显示谁转成 local time 了,这样即便不同时区显示的时间也是一样的
    jarlyyn
        8
    jarlyyn  
       2017-02-07 10:20:59 +08:00
    必然是前端转最好。
    otakustay
        9
    otakustay  
       2017-02-07 11:43:02 +08:00
    一切格式化的工作尽量靠近前端,能靠多近就多近
    suikatw
        10
    suikatw  
       2017-02-07 13:25:00 +08:00   1
    这个问题我也想了解和探讨一下

    可能场景不太一样
    我喜欢用数据库来做,因为我最担忧的是机器时间意外不准的情况下如何保证逻辑正确

    考虑到前端应用、后端应用都是多台机器,而数据库在不分库的情况下基本上请求都是打到同一台机器上,这样可以保证时间是统一的,不必过于担忧如果系统里各台机器时间不一致导致的逻辑 bug
    flyico
        11
    flyico  
       2017-02-0713:52:40 +08:00
    按说应该是前端来处理格式

    但是很多时候我们也会加上格式化好的数据 主要是为了自己调试起来方便查看
    julyclyde
        12
    julyclyde  
       2017-02-07 21:36:35 +08:00
    时间戳遇到闰秒会丢失信息量
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5111 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 09:27 PVG 17:27 LAX 01:27 JFK 04:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86