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

Javascript 一句话获得农历

  •  6
     
  •   est · 2020-09-10 18:51:43 +08:00 · 7715 次点击
    这是一个创建于 1566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看到有人说 Intl 这个 ECMAscript 内置对象,就翻了一下,发现可以一句话算农历。

    new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)年 /, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
    

    大家还有更简单或者更短的办法么。交流一下。

    第 1 条附言  ·  2020-09-10 22:42:01 +08:00

    多了个空格。囧。

    new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)\s*?年/, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
    
    第 2 条附言  ·  2020-09-10 23:41:14 +08:00

    感谢 @sarvatathagata 的最简单方法:

    new Date().toLocaleString('ja-JP-u-ca-chinese')
    

    我写了个博客稍微解释下这个 toLocaleString() https://blog.est.im/202009/stdout-008

    43 条回复    2020-09-12 23:55:48 +08:00
    honjow
        1
    honjow  
       2020-09-10 19:26:53 +08:00
    只是年吗?
    est
        2
    est  
    OP
       2020-09-10 19:58:23 +08:00 via Android
    @honjow 月 日 也有的
    LiuJiang
        3
    LiuJiang  
       2020-09-10 20:30:12 +08:00
    这个方法不错,收藏了。
    ccccccc
        4
    ccccccc  
       2020-09-10 20:36:32 +08:00
    好像不大行?

    new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)年 /, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
    "2020 年七月 23 下午 8:34:56"
    new Date().toLocaleString('zh-CN-u-ca-chinese')
    "2020 年七月 23 下午 8:35:21"
    Mutoo
        5
    Mutoo  
       2020-09-10 20:50:53 +08:00
    new Date().toLocaleString('zh-u-ca-chinese-nu-hanidec')
    "二〇二〇年七月二三 下午一〇:五〇:三六"
    est
        6
    est  
    OP
       2020-09-10 22:36:38 +08:00
    @ccccccc 正则里处理一下空格。估计你本地设置了日期格式。

    new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)\s*?年 /, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
    em2046
        7
    em2046  
       2020-09-10 22:41:04 +08:00
    @Mutoo Safari 为
    "三七 /七 /二三 下午一〇:三七:三五"
    est
        8
    est  
    OP
       2020-09-10 22:42:52 +08:00
    @em2046 37 这个我也遇到过。可以把两个 charAt 里的 -4 改成 -1 。。正则再调整一下。蛤蛤蛤蛤
    unicloud
        9
    unicloud  
       2020-09-10 22:46:07 +08:00 via iPhone
    还有这种操作?
    sarvatathagata
        10
    sarvatathagata  
       2020-09-10 22:54:20 +08:00   ❤️ 21
    @est 其实压根就不用正则的,直接 new Date().toLocaleString('ja-JP-u-ca-chinese')就可以了
    galikeoy
        11
    galikeoy  
       2020-09-10 23:00:47 +08:00
    @sarvatathagata #10 哈哈哈哈哈哈 楼主尴尬了
    w3cfed
        12
    w3cfed  
       2020-09-10 23:03:25 +08:00
    @sarvatathagata 秀丫。收藏了。
    est
        13
    est  
    OP
       2020-09-10 23:35:49 +08:00
    @sarvatathagata 你。。。作弊!
    baobao1270
        14
    baobao1270  
       2020-09-11 00:25:52 +08:00
    ICU 这个工具是个宝
    但是这个也需要浏览器支持吧

    IE 11 是这样表现的:
    new Date().toLocaleString('zh-CN-u-ca-chinese')
    "‎2020‎年‎9‎月‎11‎日‎ ‎0‎:‎23‎:‎19"

    感觉农历很麻烦的一点在于,它是需要结合天文观测测算的。而 ICU 的推算注定是不准的,因为其基准的时间戳是无法与农历用公式对应的。
    x86
        15
    x86  
       2020-09-11 00:28:49 +08:00
    长知识了,太秀了
    hlwjia
        16
    hlwjia  
       2020-09-11 01:10:12 +08:00
    如果楼主是一句话获得农历,那 @sarvatathagata 的就是“半句话获得农历”了
    ericgui
        17
    ericgui  
       2020-09-11 01:18:06 +08:00
    看了你的博客,似乎标准库的工作量还是非常大的
    AmrtaShiva
        18
    AmrtaShiva  
       2020-09-11 08:00:20 +08:00 via iPhone
    你能算出农历日来?
    Doracis
        19
    Doracis  
       2020-09-11 08:48:42 +08:00
    你这个头像和施瓦辛格的头像好像,果然猛男都是喜欢粉色吗。。
    est
        20
    est  
    OP
       2020-09-11 08:52:21 +08:00
    @Doracis 你被奇怪的东西吸引了。。。。
    flowfire
        21
    flowfire  
       2020-09-11 09:03:25 +08:00
    用 fetch 不好吗啊(手动狗头
    chotow
        22
    chotow  
       2020-09-11 09:27:20 +08:00
    为什么是「 ja-JP 」呢?这不是日本的意思吗 😕️
    LeemengG
        23
    LeemengG  
       2020-09-11 09:46:16 +08:00
    @chotow 估计是日本人现在某些场景也提供 农历 的选项
    en20
        24
    en20  
       2020-09-11 09:54:57 +08:00
    @LeemengG 日本不是用 令和 x 年 吗
    no1xsyzy
        25
    no1xsyzy  
       2020-09-11 10:01:28 +08:00   ❤️ 1
    @sarvatathagata 但是相应地丢掉了腊月和正月…… 以及闰月的 “闰” 字变繁体
    hahastudio
        26
    hahastudio  
       2020-09-11 10:06:05 +08:00
    说起来,闰月还是每年通过紫金山天文台定的么
    DsuineGP
        27
    DsuineGP  
       2020-09-11 10:12:41 +08:00
    话说 “九月第二周的周五” 这个在 js 里面怎么方便的实现啊
    KouShuiYu
        28
    KouShuiYu  
       2020-09-11 10:13:21 +08:00
    农历是没有规律的没办法算
    Guidoo
        29
    Guidoo  
       2020-09-11 10:33:50 +08:00
    博客的风格挺喜欢的, 有 github 地址吗 嘿嘿
    no1xsyzy
        30
    no1xsyzy  
       2020-09-11 10:36:11 +08:00
    @en20 这里指定了 ca-chinese,或者说等价于在 options 里面填入 {calendar: 'chinese'}
    即是指定了采用传统农历

    相应地,如果是 ja-JP-u-ca-japanese 则采用令和。不过默认的 era 属性为 narrow,导致令和显示为 `R`,需要手动指定 options 里的 {era: 'long'} 或者 {era: 'short'}
    cjc2017
        31
    cjc2017  
       2020-09-11 10:46:29 +08:00
    涨姿势了
    est
        32
    est  
    OP
       2020-09-11 10:59:08 +08:00
    est
        33
    est  
    OP
       2020-09-11 11:02:17 +08:00   ❤️ 1
    @DsuineGP 找个日期库什么的吧。。这个帮不了。
    zhw2590582
        34
    zhw2590582  
       2020-09-11 11:09:26 +08:00
    666
    xutao881
        35
    xutao881  
       2020-09-11 15:30:53 +08:00
    有点意思啊这个
    hgjian
        36
    hgjian  
       2020-09-11 16:20:19 +08:00 via Android
    推荐给大家一个库:
    https://blog.jjonline.cn/userInterFace/173.html
    我的网站顶部用的是这个:
    https://www.bas369.com
    zyc63959
        37
    zyc63959  
       2020-09-11 23:26:59 +08:00
    请教下各位,这个里面节气是怎么用的?
    veveue
        38
    veveue  
       2020-09-12 13:26:43 +08:00
    Linux x86_64 不行
    est
        39
    est  
    OP
       2020-09-12 16:38:16 +08:00 via Android
    @veveue 兄弟这个是啥浏览器?版本要新一点的才支持。nodejs 的 v8 版本也太低不支持的。
    est
        40
    est  
    OP
       2020-09-12 16:38:49 +08:00 via Android
    @zyc63959 节气可以在 icu 里调出来,js 的日期对象估计调不出来
    rus4db
        41
    rus4db  
       2020-09-12 20:28:29 +08:00
    感谢分享
    gromit1337
        42
    gromit1337  
       2020-09-12 23:25:28 +08:00 via iPhone
    楼主博客啥模版?想抄
    est
        43
    est  
    OP
       2020-09-12 23:55:48 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5866 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.