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

2017-02-06 17:12:25 +08:00
 iugo
答案可能不是绝对的, 请大家依据不同项目情况分享下自己的经验.

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

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

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

但是很多时候我们也会加上格式化好的数据 主要是为了自己调试起来方便查看
julyclyde
2017-02-07 21:36:35 +08:00
时间戳遇到闰秒会丢失信息量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338504

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX