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

請賜教
文中如有錯誤之處或者您有更好的見解、建議,還望不吝賜教。