Javascript 一句话获得农历 - V2EX
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 8236 次点击
    这是一个创建于 1859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看到有人说 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')就可以了
    dfourc
        11
    dfourc  
       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  
    PRO
       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     Solana     1115 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 23:10 PVG 07:10 LAX 16:10 JFK 19:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86