服务器导出服务器时间转换浏览器端时区

场景:数据库存储的是服务器时间,需要根据浏览器端客户的时区导出时间。
图示:
C<----- offsetClientTime ----->B<----- offsetServerTime ----->A
server------------------------------utc-------------------------------client

  1. 客户端获取时间差:

     function getTimeOffset(){
       var now = new Date(); 
       var offsetHours = now.getHours()-now.getUTCHours(); //A - B
       return offsetHours;
     }
     
     var offsetClientTime = getTimeOffset();
     //得到↑,传递给服务器
    
  2. 服务端计算时间差:

     var utcNow = DateTime.UtcNow;
     var serverNow = DateTime.Now;
     var offsetServerTime = utcNow.Hour - serverNow.Hour; //B - C
    
  3. 计算数据库
    从数据库取出的时间减去两个时间差

     var dbTime = ....;
     var outputTime = dbTime.AddHours(offsetServerTime+offsetClientTime)
    
  4. 备注
    时区有半小时的情况,所以offsetHours计算应该改为按半小时更合适(如果按照分钟或者秒传递至服务器端会有误差)

原文地址:https://www.cnblogs.com/liqipeng/p/4918125.html