這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
javascript + golang處理時間問題
今天一個同事問js和golang處理時間問題上總是有誤差,於是想到了去年做的一個項目中也出現了這樣的問題,發個部落格記錄一下:
直接上代碼:
javascript片段: var sa = $('#sa').datetimebox('getValue'); var ea = $('#ea').datetimebox('getValue'); //此時sa和ea輸出為yyyy-MM-dd HH:mm:ss這種標準格式的字串 ----------------------------------------- var sa1 = new Date(sa).toISOString(); var ea1 = new Date(ea).toISOString(); //此時sa1和ea1需轉為ISO-8601格式: YYYY-MM-DDTHH:mm:ss.sssZ
golang片段: sa1 := form["sa"][0] ea1 := form["ea"][0] fmt.Println("sa1: ", sa1) fmt.Println("ea1: ", ea1) sa, _ := time.Parse(time.RFC3339Nano, sa1) ea, _ := time.Parse(time.RFC3339Nano, ea1) fmt.Println("sa: ", sa) fmt.Println("ea: ", ea)
經過以上處理之後就不會出現前端時間和資料庫中儲存的時間不一致的情況了。
瀏覽器控制台輸出:
golang程式:
golang輸出:
資料庫儲存:
*
有些瀏覽器可能在轉iso時間的時候會出現不相容問題,只需要在轉換iso時間之前加上以下代碼即可:
if (!Date.prototype.toISOString) { Date.prototype.toISOString = function() { function pad(n) { return n < 10 ? '0' + n : n } return this.getUTCFullYear() + '-' + pad(this.getUTCMonth() + 1) + '-' + pad(this.getUTCDate()) + 'T' + pad(this.getUTCHours()) + ':' + pad(this.getUTCMinutes()) + ':' + pad(this.getUTCSeconds()) + '.' + pad(this.getUTCMilliseconds()) + 'Z'; } }
*
希望對各位能有所協助!