V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Livid
V2EX  ›  JavaScript

关于网页上的时间渲染

  •  
  •   Livid · 2022-04-03 15:47:37 +08:00 · 4026 次点击
    这是一个创建于 942 天前的主题,其中的信息可能已经有所发展或是发生改变。

    输入:

    Unix Timestamp

    输出:

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


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

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

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