关于网页上的时间渲染

2022-04-03 15:47:37 +08:00
 Livid

输入:

Unix Timestamp

输出:

根据用户 Locale 设置渲染不同的结果,比如 Apr 2, 2022 或者 2022 年 4 月 2 日


上面这样的需求有可能不用任何第三方库,就只用 Vanilla JS 实现么?

4073 次点击
所在节点    JavaScript
12 条回复
Cbdy
2022-04-03 15:53:34 +08:00
new Date().toLocaleString('sv', { hour12: false, timeZone: 'Asia/Shanghai' })
DrakeXiang
2022-04-03 16:00:50 +08:00
loading
2022-04-03 16:25:10 +08:00
重点应该是得到正确的 locale ,目前我只想到用 navigator.language
loading
2022-04-03 16:46:36 +08:00
可以参考这个纯粹的时钟网站:

https://time.is/
Cbdy
2022-04-03 16:53:10 +08:00
@loading navigator.language 这个非常不准
learningman
2022-04-03 16:54:41 +08:00
https://flyhigher.top/develop/2482.html
昨天看到的一篇谈这个的文章,讲的挺好的
mxT52CRuqR6o5
2022-04-03 17:01:11 +08:00
new Date().toLocaleDateString(undefined,{dateStyle:'medium'})
我这边测下来用 dateStyle:'medium'中英文都是符合要求的
Date.prototype.toLocaleString
Date.prototype.toLocaleDateString
Intl.DateTimeFormat
应该都可以接收这个参数
dawniii
2022-04-03 18:28:00 +08:00
locale 和 language 都是系统可修改的吧,无所谓准不准,按用户的设置来。
@loading @Cbdy
Cbdy
2022-04-03 19:33:44 +08:00
@dawniii 我是指浏览器不准,比如中文系统,中文语言设置的 Firefox 获取的 language 是 en
duanxianze
2022-04-03 19:33:49 +08:00
如果你想获取用户的时区,那最好的当然是定位权限,当然定位也不一定准,但只要不是用户刻意虚拟定位,显然确定时区还是没问题的,用户不给,就按 ip 来
os7blue
2022-04-03 20:16:07 +08:00
如果只是展示:
其实你如果用标准的 yyyy-MM-dd hh:mm:ss 用阿拉伯数字,世界通用的,不要去在乎语言问题,根据用户自己的设置做转换就行了,如果用户的设置造成的问题,那不是你的错。你顶多给个提醒就仁至义尽了。
如果对时间有安全需要:
你可以后端一并返回时间戳和地区信息,或者自己做一个授时服务,判断时间区间就行了,使网页上的时钟信息独立于本机。
如果用户使用了代理导致你获取的定位信息不对,那不是你该考虑的问题,你只要保证自己的服务相关时间戳就行了。
bnm965321
2022-04-03 20:48:58 +08:00
2 楼说的 Intl 是 web 标准的 i18n 方式

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

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

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

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

© 2021 V2EX