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

Javascript 一句话获得农历

  •  5
     
  •   est · 19 天前 · 4123 次点击

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

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

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

    第 1 条附言  ·  19 天前

    多了个空格。囧。

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

    感谢 @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   19 天前
    只是年吗?
    est
        2
    est   19 天前 via Android
    @honjow 月 日 也有的
    LiuJiang
        3
    LiuJiang   19 天前
    这个方法不错,收藏了。
    ccccccc
        4
    ccccccc   19 天前
    好像不大行?

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

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

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

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

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