JSRUN 用代码说话

JavaScript日期

编辑教程

JavaScript日期

Moment.js为原生JavaScript日期对象提供了包装。

为此,Moment.js扩展了功能,还解决了对象中的几个缺陷。

使用本地日期进行解析显然是不可预测的。例如,假设我在美国使用计算机,但是我有DD / MM / YYYY格式的日期。

var a = new Date('01/12/2016'); //December 1 2016 in DD/MM/YYYY format
//"Tue Jan 12 2016 00:00:00 GMT-0600 (Central Standard Time)"

对于本机Date对象,此行为没有好的解决方法。

Moment的解析器可以很好地处理它:

moment('01/12/2016', 'DD/MM/YYYY', true).format()
"2016-12-01T00:00:00-06:00"

此外,ECMA Script 5规范对ISO 8601日期的偏移量做出了不寻常的断言:

缺少时区偏移的值为“ Z”

实际上,这意味着将没有偏移的ISO 8601日期视为UTC值,从而产生以下奇怪之处:

//US local format
var a = new Date('1/1/2016'); 
//"Fri Jan 01 2016 00:00:00 GMT-0600 (Central Standard Time)"

//ISO 8601
var a = new Date('2016-01-01');
//"Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)"

ES2015规范解决了该错误,使其与ISO8601规范保持一致,该规范指定了不存在偏移的本地时间。

这以其自身的方式是不好的,因为它具有许多负面的向后兼容性影响。

使用Moment,除非您另外指定,否则日期始终被解释为本地时间。随着ES2015的采用,这不会改变。

moment('2016-01-01')
//"2016-01-01T00:00:00-06:00"

算术是缺少本机Date对象的另一个区域。Date对象实际上没有为此提供任何API。相反,它依赖于溢出的日期值。

假设您想在2016年4月30日前增加1天。使用date对象,您将需要执行以下操作:

var a = new Date('4/30/2016'); 
a.setDate(a.getDate() + 1);

这可以解决问题,但是有点不直观。

Moment提供了一个API,用于添加/减去:

moment('4/30/2016', 'MM/DD/YYYY').add(1, 'day')
//"2016-05-01T00:00:00-05:00"
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟