Bug描述
最近在做項(xiàng)目時(shí)用到了ElementUI的el-date-picker組件。項(xiàng)目中需要實(shí)現(xiàn)一個(gè)定時(shí)功能,提交數(shù)據(jù)時(shí),需要將設(shè)置的時(shí)間與當(dāng)前的時(shí)間做比較,設(shè)置的時(shí)間不能小于當(dāng)前時(shí)間。我當(dāng)時(shí)做這個(gè)功能時(shí),是直接將二者相減,來(lái)做判斷。releaseTime為我設(shè)定的定時(shí)發(fā)布時(shí)間。
releaseTime - new Date().getTime()
這樣寫(xiě),在通過(guò)el-date-picker設(shè)定時(shí)間時(shí)沒(méi)有問(wèn)題。但在某些情形下,需要將后臺(tái)拿到的時(shí)間(ms格式)轉(zhuǎn)為常見(jiàn)的日期格式(2017-06-21 16:04:00),并顯示在el-date-picker中,此時(shí)再做判斷就出問(wèn)題,此時(shí)無(wú)法做出判斷,這是為什么呢?
Bug分析
問(wèn)題的根源在于通過(guò)el-date-picker得到的數(shù)據(jù)和通過(guò)毫秒格式的數(shù)據(jù)轉(zhuǎn)化拿到的時(shí)間數(shù)據(jù)的類(lèi)型是不一樣的,這其實(shí)算個(gè)很低級(jí)的錯(cuò)誤。
我采用的轉(zhuǎn)換時(shí)間格式的方法如下:
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類(lèi)型的,2017-06-21 16:12:37,而通過(guò)el-date-picker得到的releaseTime是Date對(duì)象的實(shí)例,Wed Jun 21 2017 16:12:37 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間),因此通過(guò)timeFormat轉(zhuǎn)換得到的releaseTime無(wú)法與new Date()比較大小。
Bug解決方法
解決方法很簡(jiǎn)單,只需要將String類(lèi)型的releaseTime轉(zhuǎn)為Date的實(shí)例即可
new Date(releaseTime) - new Date().getTime()
其實(shí),這個(gè)地方,getTIme()是畫(huà)蛇添足的。Date對(duì)象的實(shí)例在相減時(shí)會(huì)自動(dòng)轉(zhuǎn)化為毫秒格式,返回二者相差的毫秒數(shù)。

請(qǐng)賜教
文中如有錯(cuò)誤之處或者您有更好的見(jiàn)解、建議,還望不吝賜教。