java Date 和 javascript Date,datejavascript
最近寫一個頁面,上面要展示下日期。在Java中產生了Date,然後將這個Date通過velocity送入vm模板當中
代碼如下:
var dates = new Date("$!{pp.date}");var dateStr = date2String(dates);
其中 date2String是這樣的,函數參考
http://www.w3school.com.cn/jsref/jsref_obj_date.asp
function date2String(date) {var year = date.getFullYear();var month = date.getMonth();var day = date.getDate();var hour = date.getHours();var minute = date.getMinutes();var second = date.getSeconds();var monthStr = (month <= 9 ? "0":"") + month;var dayStr = (day <= 9 ? "0":"") + day;var hourStr = (hour <= 9 ? "0":"") + hour;var minuteStr = (minute <= 9 ? "0":"") + minute;var secondStr = (second <= 9 ? "0":"") + second;return ""+year+"-"+monthStr+"-"+dayStr+" "+hourStr+":"+minuteStr+":"+secondStr;}
結果解析發現時間全亂了!
首先是月份不對,這個是一個自己粗心的bug,因為getMonth得到的結果是0-11的,因此需要在後面+1,這個比較容易搞定
後面的並沒有因為少1的原因而變形。
現在有兩種方案:其一,直接傳遞一個Java修改好格式後的字串給js,其二想想別的辦法。
本來想偷懶的就用其一吧。但是想了想還是其二更能偷懶,而且還能學到新東西,用其二吧。
想了想直接將Date對象傳遞過來可能在實現上確實比較詭異。Date應該都是從1970年開始時的時間差,因此用一個long做建構函式的參數應該是有的。當然在上面的
中文w3c的網頁上只給出了一種構造方法,即取得當前的時間。
連前面的直接賦值date的都沒有事,因此覺得應該有別的建構函式,因此選擇再找找看,查看下Date的建構函式:
http://www.tutorialspoint.com/javascript/javascript_date_object.htm
用
new Date(milliseconds)
靠譜一點,畢竟是存放在底層的資料。
因此改成:
var dates = new Date($!{pp.date.getTime()});
靠譜多啦。搞定,看看原來的為啥這麼不靠譜。
原來傳遞進去的Date是:
date=Sun Dec 14 09:40:11 CST 2014
date=Sat Dec 13 23:54:00 CST 2014
但是:
變成了 2014-12-14 23:40:11
和 2014-12-14 13:54:00
都是增加了14個小時!
列印後發現:
dates=Sun Dec 14 2014 13:54:00 GMT+0800
dates=Sun Dec 14 2014 23:40:11 GMT+0800
那麼就是時區的問題了!
根據 Wiki 上面的CST :
http://zh.wikipedia.org/wiki/CST
除了表示中國,還可以表示澳洲和美國中部時間。應該是美國中部時間比較靠譜,咱們在東8區, 那麼美國中部應該是在西6區。
查看下果不其然。
因此js是把CST當成了美國中部時間(Central Standard Time (North America))而不是(China Standard Time)。
從而導致對應的錯誤。折騰了一下還是能找到原因的哈哈。加油。
======
PS。還是要細心啊,不能老出問題了才發現問題然後去補救。測試的時候一定要細心。