关于日期时间的格式问题

Bug描述

最近在做项目时用到了ElementUI的el-date-picker组件。项目中需要实现一个定时功能,提交数据时,需要将设置的时间与当前的时间做比较,设置的时间不能小于当前时间。我当时做这个功能时,是直接将二者相减,来做判断。releaseTime为我设定的定时发布时间。
releaseTime - new Date().getTime()
这样写,在通过el-date-picker设定时间时没有问题。但在某些情形下,需要将后台拿到的时间(ms格式)转为常见的日期格式(2017-06-21 16:04:00),并显示在el-date-picker中,此时再做判断就出问题,此时无法做出判断,这是为什么呢?

Bug分析

问题的根源在于通过el-date-picker得到的数据和通过毫秒格式的数据转化拿到的时间数据的类型是不一样的,这其实算个很低级的错误。
我采用的转换时间格式的方法如下:

function timeFormat(val){    
      let d,s;
      d = new Date(val);
      s = d.getFullYear() + "-";
      s += addZero(d.getMonth() + 1) + "-";
      s += addZero(d.getDate()) + " ";
      s += addZero(d.getHours()) + ":";
      s += addZero(d.getMinutes()) + ":";
      s += addZero(d.getSeconds());
      return s;
}

这里得到的releaseTime是String类型的,2017-06-21 16:12:37,而通过el-date-picker得到的releaseTime是Date对象的实例,Wed Jun 21 2017 16:12:37 GMT+0800 (中国标准时间),因此通过timeFormat转换得到的releaseTime无法与new Date()比较大小。

Bug解决方法

解决方法很简单,只需要将String类型的releaseTime转为Date的实例即可
new Date(releaseTime) - new Date().getTime()
其实,这个地方,getTIme()是画蛇添足的。Date对象的实例在相减时会自动转化为毫秒格式,返回二者相差的毫秒数。

image.png

请赐教

文中如有错误之处或者您有更好的见解、建议,还望不吝赐教。

你可能感兴趣的:(关于日期时间的格式问题)