javascript的倒計時功能中newData().getTime()在iOS下會報錯問題解決
在做移動端時間轉化為時間戳時,遇到了一個問題,安卓手機上訪問時,能拿到時間戳,從而正確轉換時間,而在iOS上缺不能正常顯示,顯示的時間為:NaN-NaN1-NaN Invalid Date
new Date('2016-07-18 14:58:32').getTime(); //在ios上死活拿不到時間戳顯示NaN
在網上找問題出現原因,看到以下內容:
在IOS5以上版本(不包含IOS5)中的Safari瀏覽器能正確解釋出Javascript中的 new Date('2013-10-21') 的日期對象。
但是在IOS5版本里面的Safari解釋new Date('2013-10-21') 就不正確,在IOS5的Safari中返回的永遠是"Invalid Date"。
后來我在網上查找了資料,原來是低版本的Safari解釋new Date('2013-10-21')這個對象不一樣,在IOS5中的Safari不支持這種寫法,
而它支持的寫法為new Date('2013','10','21'),這樣寫就能解決"Invalid Date"的問題,能返回一個Javascript Date回來了。
但是隨之而來的問題有出現了,Date是返回過來了,可是這個Date對象中方法返回的數據可不是我想要的,返回的數據全都不正確。
現在返回過來的Date對象.getMonth()總要比正常的要多一個月!還有.getDay()返回的星期幾也不正確!╮(╯▽╰)╭懊惱啊,折磨啊。。。。
我都開始罵開發Safari的這幫人了,不過罵歸罵問題還是要解決的,要不工資就木有了!呵呵!
接着我查了很多國外的技術blog,終於找到了解決方案,原來想要IOS5中的Safari能正確解析new Date()那么必須這么寫
new Date('2013/10/21');
最后根據項目中的數據將代碼修改了下: new Date("2010-03-15 10:30:00".replace(/-/g,'/')).getTime();終於解決了問題!!!(真是嚇死,還以為要任務延期了,還好解決了)
獲得當前時間:
1 //獲得當前時間 2 function getLocalTime(now) { 3 now = new Date(now); 4 var year=now.getFullYear(); 5 var month=now.getMonth()+1; 6 var date=now.getDate(); 7 var hour=(now.getHours()<10)?("0"+now.getHours()):now.getHours(); 8 var minute=(now.getMinutes()<10)?("0"+now.getMinutes()):now.getMinutes(); 9 var second=(now.getSeconds()<10)?("0"+now.getSeconds()):now.getSeconds(); 10 return year+"/"+month+"/"+date +" "+hour+":"+minute+":"+second; 11 12 }
下面貼上整個倒計時代碼:
1 //倒計時時間計算函數 2 function getTime(obj){ 3 var StartTime= new Date(obj.Start.replace(/-/g,'/')); //活動開始時間 4 var endTime = new Date(obj.End.replace(/-/g,'/'));//活動結束時間 5 var NowTime = new Date(); 6 var t =StartTime.getTime() - NowTime.getTime(),t_end = endTime.getTime() - NowTime.getTime(); 7 var d=Math.floor(t/1000/60/60/24), h=Math.floor(t/1000/60/60%24),m=Math.floor(t/1000/60%60),s=Math.floor(t/1000%60); 8 var d_end=Math.floor(t_end/1000/60/60/24), h_end=Math.floor(t_end/1000/60/60%24),m_end=Math.floor(t_end/1000/60%60),s_end=Math.floor(t_end/1000%60); 9 d = d<=0?0:d; 10 h = h<=0?0:h; 11 m = m<=0?0:m; 12 s = s<=0?0:s; 13 d_end = d_end<=0?0:d_end; 14 h_end = h_end<=0?0:h_end; 15 m_end = m_end<=0?0:m_end; 16 s_end = s_end<=0?0:s_end; 17 var startIs = d==0&&h==0&&m==0&&s==0,endIs =d_end==0&&h_end==0&&m_end==0&&s_end==0 ; 18 if(startIs== true && endIs ==true){ 19 setTime=""; 20 dateShow = "直播活動已經結束"; 21 }else if(startIs== true && endIs ==false){ 22 setTime=""; 23 dateShow = "直播活動正在進行"; 24 timer = setTimeout(setTimer,500); 25 }else if(startIs== false && endIs ==false){ 26 setTime="直播開始時間為:"+obj.Start; 27 dateShow="距離直播開始還有:"+d+"天"+h +"時"+m+"分"+s+"秒"; 28 } 29 $(obj.eleCode).find(".setTime").html(setTime); 30 $(obj.eleCode).find(".startTime").html(dateShow); 31 }