场景:数据库存储的是服务器时间,需要根据浏览器端客户的时区导出时间。
图示:
C<----- offsetClientTime ----->B<----- offsetServerTime ----->A
server------------------------------utc-------------------------------client
-
客户端获取时间差:
function getTimeOffset(){ var now = new Date(); var offsetHours = now.getHours()-now.getUTCHours(); //A - B return offsetHours; } var offsetClientTime = getTimeOffset(); //得到↑,传递给服务器
-
服务端计算时间差:
var utcNow = DateTime.UtcNow; var serverNow = DateTime.Now; var offsetServerTime = utcNow.Hour - serverNow.Hour; //B - C
-
计算数据库
从数据库取出的时间减去两个时间差var dbTime = ....; var outputTime = dbTime.AddHours(offsetServerTime+offsetClientTime)
-
备注
时区有半小时的情况,所以offsetHours计算应该改为按半小时更合适(如果按照分钟或者秒传递至服务器端会有误差)