今天看到有人说 Intl 这个 ECMAscript 内置对象,就翻了一下,发现可以一句话算农历。
new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)年 /, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
大家还有更简单或者更短的办法么。交流一下。
多了个空格。。
new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)\s*?年/, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12))
感谢 @sarvatathagata 的最简单方法:
new Date().toLocaleString('ja-JP-u-ca-chinese')
我写了个博客稍微解释下这个 toLocaleString() https://blog.est.im/202009/stdout-008
![]() | 1 honjow 2020-09-10 19:26:53 +08:00 只是年吗? |
![]() | 3 LiuJiang 2020-09-10 20:30:12 +08:00 这个方法不错,收藏了。 |
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" |
![]() | 5 Mutoo 2020-09-10 20:50:53 +08:00 new Date().toLocaleString('zh-u-ca-chinese-nu-hanidec') "二二年七月二三 下午一:五:三六" |
![]() | 6 est OP @ccccccc 正则里处理一下空格。估计你本地设置了日期格式。 new Date().toLocaleString('zh-CN-u-ca-chinese').replace(/(\d+)\s*?年 /, (_,y)=>"甲乙丙丁戊己庚辛壬癸".charAt((y-4)%10) + "子丑寅卯辰巳午未申酉戌亥".charAt((y-4)%12)) |
![]() | 9 unicloud 2020-09-10 22:46:07 +08:00 via iPhone 还有这种操作? |
10 sarvatathagata 2020-09-10 22:54:20 +08:00 ![]() @est 其实压根就不用正则的,直接 new Date().toLocaleString('ja-JP-u-ca-chinese')就可以了 |
![]() | 11 dfourc 2020-09-10 23:00:47 +08:00 @sarvatathagata #10 哈哈哈哈哈哈 楼主尴尬了 |
![]() | 12 w3cfed 2020-09-10 23:03:25 +08:00 @sarvatathagata 秀丫。收藏了。 |
![]() | 13 est OP @sarvatathagata 你。。。作弊! |
![]() | 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 的推算注定是不准的,因为其基准的时间戳是无法与农历用公式对应的。 |
![]() | 15 x86 2020-09-11 00:28:49 +08:00 长知识了,太秀了 |
![]() | 16 hlwjia PRO 如果楼主是一句话获得农历,那 @sarvatathagata 的就是“半句话获得农历”了 |
![]() | 17 ericgui 2020-09-11 01:18:06 +08:00 看了你的博客,似乎标准库的工作量还是非常大的 |
![]() | 18 AmrtaShiva 2020-09-11 08:00:20 +08:00 via iPhone 你能算出农历日来? |
![]() | 19 Doracis 2020-09-11 08:48:42 +08:00 你这个头像和施瓦辛格的头像好像,果然猛男都是喜欢粉色吗。。 |
![]() | 21 flowfire 2020-09-11 09:03:25 +08:00 用 fetch 不好吗啊(手动狗头 |
![]() | 22 chotow 2020-09-11 09:27:20 +08:00 为什么是「 ja-JP 」呢?这不是日本的意思吗 |
![]() | 25 no1xsyzy 2020-09-11 10:01:28 +08:00 ![]() @sarvatathagata 但是相应地丢掉了腊月和正月…… 以及闰月的 “闰” 字变繁体 |
![]() | 26 hahastudio 2020-09-11 10:06:05 +08:00 说起来,闰月还是每年通过紫金山天文台定的么 |
27 DsuineGP 2020-09-11 10:12:41 +08:00 话说 “九月第二周的周五” 这个在 js 里面怎么方便的实现啊 |
![]() | 28 KouShuiYu 2020-09-11 10:13:21 +08:00 农历是没有规律的没办法算 |
![]() | 29 Guidoo 2020-09-11 10:33:50 +08:00 博客的风格挺喜欢的, 有 github 地址吗 嘿嘿 |
![]() | 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'} |
31 cjc2017 2020-09-11 10:46:29 +08:00 涨姿势了 |
![]() | 32 est OP |
![]() | 34 zhw2590582 2020-09-11 11:09:26 +08:00 666 |
![]() | 35 xutao881 2020-09-11 15:30:53 +08:00 有点意思啊这个 |
![]() | 36 hgjian 2020-09-11 16:20:19 +08:00 via Android |
37 zyc63959 2020-09-11 23:26:59 +08:00 请教下各位,这个里面节气是怎么用的? |
38 veveue 2020-09-12 13:26:43 +08:00 Linux x86_64 不行 |
![]() | 39 est OP @veveue 兄弟这个是啥浏览器?版本要新一点的才支持。nodejs 的 v8 版本也太低不支持的。 |
![]() | 41 rus4db 2020-09-12 20:28:29 +08:00 感谢分享 |
42 gromit1337 2020-09-12 23:25:28 +08:00 via iPhone 楼主博客啥模版?想抄 |
![]() | 43 est OP |