Date對象 IOS踩坑
最近在做一個託管教師端小程序,裏面有一個功能是選擇某個日期加載該老師相關的課程,這裏就需要用到日曆組件。基於後臺返回的數據及減少對日曆組件的修改,我選擇了對小程序一開始自配備的轉換時間格式方法進行了修改。用起來也沒有太大毛病,坑就在這裏埋下了。
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
module.exports = {
formatTime: formatTime
}
由於開發和調試一直用的是微信開發者工具,在開發過程中也很順利,直到使用了真機進行測試的。在安卓機上是沒有問題的,但一旦遇到了蘋果機,我的整個功能就垮掉了。排查了很久才發現是日期轉換的問題。
在開發中,由於與日曆相關,肯定會大量用到Date對象的。
當使用
var date = new Date();
在安卓和蘋果機上是可以運行且有結果的。
但是在這個項目裏面需要用到根據字符串去獲取日期,然後問題就來了。我的字符串日期格式是2018-01-01類型的
var date = new Date("2016-05-31");
這段代碼是獲得字符中指定的日期,它Firefox、Chrome中就能運行,但是在蘋果手機就會報錯,錯誤是NaN,意思是Not a Number。就是因爲這個錯,蘋果手機不能正常運行。
解決方法
var date =new Date("2016/05/31");
這種字符串格式獲取日期在蘋果和安卓機上都能正常運行。由於代碼中大量用到的是-模式。在使用new Date的時候寫一個函數去轉換一下即可。
function GetDateDiff(startDiffTime, endDiffTime) {
//將xxxx-xx-xx的時間格式,轉換爲 xxxx/xx/xx的格式
startTime = startDiffTime.replace(/\-/g, "/");
endTime = endDiffTime.replace(/\-/g, "/");
};
總結
不要輕易的去改微信小程序提供工具類的代碼,爲什麼用"/"可能是有原因的,微信已經幫你兼容好了。否則,就像我一樣浪費時踩來踩去的間在這個坑裏