答案可能不是绝对的, 请大家依据不同项目情况分享下自己的经验.
针对一个 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
![]() | 1 jingniao 2017-02-06 17:30:07 +08:00目前都是 int 类型的时间戳,转换大部分是在返回给前端的时候做下,也偶尔让前端自己转 |
![]() | 2 hheedat 2017-02-06 17:35:03 +08:00时间戳格式化应该由前端完成,前端根据设计自行决定显示的格式 |
3 gzb001 2017-02-06 17:49:23 +08:00支持 @hheedat 的说法,前台页面对于时间展示的格式要求多变,由前端进行处理,可以灵活一点。 |
4 gamexg 2017-02-06 18:30:31 +08:00@hheedat +1 XX 秒前 XX 时区,还是前端方便。 |
![]() | 5 wizardforcel 2017-02-06 18:33:10 +08:00 via Android前端 |
![]() | 6 learnshare 2017-02-06 19:35:51 +08:00 via Android展示端格式化,传输和计算都尽量保证统一的格式,比如用毫秒值 |
7 owt5008137 2017-02-07 09:08:47 +08:00 via Androidunix 时间戳兼容性最高哇,毫秒时间戳支持的语言并不多。逻辑时间操作一般直接用 UTC 时间戳,避免时区和闰秒问题。显示部分当然谁要显示谁转成 local time 了,这样即便不同时区显示的时间也是一样的 |
![]() | 8 jarlyyn 2017-02-07 10:20:59 +08:00必然是前端转最好。 |
![]() | 9 otakustay 2017-02-07 11:43:02 +08:00一切格式化的工作尽量靠近前端,能靠多近就多近 |
![]() | 10 suikatw 2017-02-07 13:25:00 +08:00 ♥ 1这个问题我也想了解和探讨一下 |
11 flyico 2017-02-07 13:52:40 +08:00按说应该是前端来处理格式 |
12 julyclyde 2017-02-07 21:36:35 +08:00时间戳遇到闰秒会丢失信息量 |