推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
est

Javascript 一句话获得农历

  •  6
     
  •   est · Sep 10, 2020 · 9396 views
    This topic created in 2246 days ago, the information mentioned may be changed or developed.

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

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

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

    Supplement 1  ·  Sep 10, 2020

    多了个空格。囧。

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

    感谢 @sarvatathagata 的最简单方法:

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

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

    43 replies  •  2020-09-12 23:55:48 +08:00
    honjow
    honjow
    Sep 10, 2020
    1
    只是年吗?
    est
    est
    OP
    Sep 10, 2020 via Android
    2
    @honjow 月 日 也有的
    jchencode
    jchencode
    Sep 10, 2020
    3
    这个方法不错,收藏了。
    ccccccc
    ccccccc
    Sep 10, 2020
    4
    好像不大行?

    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
    Mutoo
    Sep 10, 2020
    5
    new Date().toLocaleString('zh-u-ca-chinese-nu-hanidec')
    "二〇二〇年七月二三 下午一〇:五〇:三六"
    est
    est
    OP
    Sep 10, 2020
    6
    @ccccccc 正则里处理一下空格。估计你本地设置了日期格式。

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

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

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

    相应地,如果是 ja-JP-u-ca-japanese 则采用令和。不过默认的 era 属性为 narrow,导致令和显示为 `R`,需要手动指定 options 里的 {era: 'long'} 或者 {era: 'short'}
    cjc2017
    cjc2017
    Sep 11, 2020
    31
    涨姿势了
    est
    est
    OP
    Sep 11, 2020
    32
    est
    est
    OP
    Sep 11, 2020❤️1
    33
    @DsuineGP 找个日期库什么的吧。。这个帮不了。
    zhw2590582
    zhw2590582
    Sep 11, 2020
    34
    666
    Balibabo
    Balibabo
    Sep 11, 2020
    35
    有点意思啊这个
    hgjian
    hgjian
    Sep 11, 2020 via Android
    36
    推荐给大家一个库:
    https://blog.jjonline.cn/userInterFace/173.html
    我的网站顶部用的是这个:
    https://www.bas369.com
    zyc63959
    zyc63959
    Sep 11, 2020
    37
    请教下各位,这个里面节气是怎么用的?
    veveue
    veveue
    Sep 12, 2020
    38
    Linux x86_64 不行
    est
    est
    OP
    Sep 12, 2020 via Android
    39
    @veveue 兄弟这个是啥浏览器?版本要新一点的才支持。nodejs 的 v8 版本也太低不支持的。
    est
    est
    OP
    Sep 12, 2020 via Android
    40
    @zyc63959 节气可以在 icu 里调出来,js 的日期对象估计调不出来
    rus4db
    rus4db
    Sep 12, 2020
    41
    感谢分享
    gromit1337
    gromit1337
    Sep 12, 2020 via iPhone
    42
    楼主博客啥模版?想抄
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5314 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 02:06 · PVG 10:06 · LAX 18:06 · JFK 21:06
    ♥ Do have faith in what you're doing.