当前位置:嗨网首页>书籍在线阅读

10-展示日期

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

15.7 展示日期

对于初学者来说,将日期格式化并展示出来,通常是最让人沮丧的问题之一。JavaScript的内建 Date 对象只包含了少数预置的日期格式,如果它们不能满足需求,自己去做格式化会是一件很痛苦的事。幸运的是,Moment.js在这个领域很擅长,如果需要展示特殊格式的日期,建议使用它。

使用Moment.js格式化日期时,调用它的 format 方法即可。format方法接收一个字符串元字符,该元字符会被对应的日期组件替代。例如,字符串 "YYYY" 会被替换成4位数的年份。这里有一些例子,分别是使用 Date 对象的內建方法格式化日期,以及使用更强大的Moment.js方法来进行格式化:

const d = new Date(Date.UTC(1930, 4, 10));
// 这些是洛杉矶所在时区的输出结果
d.toLocaleDateString()    // "5/9/1930"
d.toLocaleFormat()        // "5/9/1930 4:00:00 PM"
d.toLocaleTimeString()    // "4:00:00 PM"
d.toTimeString()          // "17:00:00 GMT-0700 (Pacific Daylight Time)"
d.toUTCString()           // "Sat, 10 May 1930, 00:00:00 GMT"
moment(d).format("YYYY-MM-DD");          // "1930-05-09"
moment(d).format("YYYY-MM-DD HH:mm");    // "1930-05-09 17:00
moment(d).format("YYYY-MM-DD HH:mm Z");  // "1930-05-09 17:00 –07:00
moment(d).format("YYYY-MM-DD HH:mm [UTC]Z");// "1930-05-09 17:00 UTC-07:00
moment(d).format("dddd, MMMM [the] Do,YYYY"); // "Friday, May the 9th,1930"
moment(d).format("h:mm a");                // "5:00 pm"

从这些例子中大家可以看出,JavaScript內建的格式化日期方法有很多不一致的地方,而且使用起来不灵活。JavaScript尝试用这些内建的格式化选项来支持用户所属地区的日期格式化。如果需要支持多个地区的日期格式化,这会是一个相对廉价但缺乏灵活性的方式。

这个例子并不是为了演示Moment.js中多种多样的格式化方式(想了解所有格式化方式,可以参考Moment.js的在线文档),它想传达的意思是:Moment.js几乎可以满足任何格式化日期的需求。像很多格式化日期的元语言一样,它也有一些通用的约定。比如,字符越多表示信息越详细;也就是说,“M”的结果是1、2、3……;“MM”是01、02、03……;“MMM”为Jan、Feb、Mar……,“MMMM”为January、February、March,……小写的“o”会生成序号:“Do”的的结果是1st、2nd,等等。如果不想让字母被解释为元字符,可以用方括号将它们括起来:“[M]M”生成的结果是M1、M2,以此类推。

Moment.js还未完全解决的一个问题是时区缩写的使用,例如,EST和PST。因为没有一个统一的国际标准,Moment.js已经弃用格式化字符z。关于时区缩写问题的详细讨论可以参考Moment.js官方文档。