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';
}
}
*
希望对各位能有所帮助!
有疑问加站长微信联系(非本文作者)