webkit內(nèi)核和blink內(nèi)核對new Date('YYYY-MM-DD hh:mm:ss')處理不同
在小程序開發(fā)中,可能會(huì)遇到android機(jī)器上顯示正常,到蘋果手機(jī)上顯示異常(invalid date)問題,目前發(fā)現(xiàn)的原因是由于不同的機(jī)器使用的解析JS的引擎不同。
在這里使用IE11(webkit), safari(webkit)和chrome(blink)進(jìn)行測試,Edge已經(jīng)基于Chromium開發(fā),故不考慮單獨(dú)測試。
基于chrome的測試結(jié)果

基于IE11的測試結(jié)果

基于safari的測試結(jié)果


知識拓展
各平臺腳本執(zhí)行環(huán)境以及用于渲染非原生組件的環(huán)境是各不相同的:
在 iOS 上,小程序邏輯層的 javascript 代碼運(yùn)行在 JavaScriptCore 中,視圖層是由 WKWebView 來渲染的,環(huán)境有 iOS 12、iOS 13 等;
在 Android 上,小程序邏輯層的 javascript 代碼運(yùn)行在 V8 中,視圖層是由自研 XWeb 引擎基于 Mobile Chrome 內(nèi)核來渲染的;
在 開發(fā)工具上,小程序邏輯層的 javascript 代碼是運(yùn)行在 NW.js 中,視圖層是由 Chromium Webview 來渲染的。
在 PC 上,小程序邏輯層 javascript 和視圖層 javascript 都是用 Chrome 內(nèi)核
在 Mac 上,小程序邏輯層的 javascript 代碼運(yùn)行在 JavaScriptCore 中,視圖層是由 WKWebView 來渲染的,與 iOS 一致
https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/env.html
結(jié)論
在做時(shí)間轉(zhuǎn)換時(shí),避免使用new Date('YYYY-MM-DD hh:mm:ss'),new Date('YYYY.MM.DD') 目前還沒有得到所有瀏覽器的支持。
在內(nèi)部處理時(shí)間時(shí)盡量使用時(shí)間對象,需要轉(zhuǎn)換成字符串的情況下使用格式:YYYY-MM-DD, 如果在對接口或者在顯示的時(shí)候需要修改格式,在最后一步進(jìn)行轉(zhuǎn)換操作。