java Date 和 javascript Date
最近寫一個頁面,上面要展示下日期。在Java中產生了Date,然後將這個Date通過velocity送入vm模板當中
代碼如下:
var dates = new Date($!{pp.date});var dateStr = date2String(dates);
其中 date2String是這樣的,函數參考
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 :
除了表示中國,還可以表示澳洲和美國中部時間。應該是美國中部時間比較靠譜,咱們在東8區, 那麼美國中部應該是在西6區。