虽然,我们可以自己写算法,但是在很多现代浏览器中,可以直接使用Date对象的toLocaleString和toLocaleDateString方法来获得农历等各种历法的字符串。这两个函数的区别在于前者包括日期和时间,后者只包括年月日。它们都有两个可选参数,第一个参数是符合BCP47标准的语言标记,第二个参数是一些设置,我们暂且用不到,这篇文章中,我们主要用到第一个参数。
当这两个方法没有传入参数的时候,会返回本机语言环境的公历日期(或者日期和时间)字符串。
我们要获得农历日期,就需要使用到第一个参数了。这个参数是一个字符串,这个字符串是由多个缩略词通过连词符构成的,有些词语是可选的。
一个代码实例:
new Date().toLocaleString("zh-u-ca-chinese");
上面的代码会返回使用中文表示的中国农历的日期和时间字符串,“zh-u-ca-chinese”这个字符串被称为语言标记。
接下去,我们来稍微地看一下语言标记的构成。
首先,第一个词汇是必选的,代表语言,zh代表中文,en代表英语。
接着,可以是该语言的一个写法,例如Hans代表简体,Hant代表繁体,那么连起来就是zh-Hans代表简体中文,zh-Hant代表繁体中文。这个词汇是可选的。
然后,可以是某个特定地区使用的该语言,这个参数也是可选的。例如en-GB代表英国英语,en-US代表美国英语,在没有指定地区代码的情况下,代表的是这种语言的标准形式,例如en代表标准英语。
之后,我们可以使用u参数开启Unicode扩展。Unicode扩展中定义了各种语言的各种不同使用场景(例如数字、日历等,被称为Key,即键,其中日历的键为ca)下的各种类型(例如历法,被称为Type,即类型)。那么,u-ca就是指Unicode日历扩展。
日历的类型有很多,chinese代表中国农历,japnese代表日本年号日历,buddhist代表泰国佛历,其它请参见cldr官方文档中和BCP47标准相关的内容。那么,连起来,“zh-u-ca-chinese”就代表使用中文表示的中国农历,“en-u-ca-chinese”就代表使用英文表示的中国农历。
如若转载,请注明出处:https://www.daxuejiayuan.com/14955.html