参考:https://www.cnblogs.com/hamsterPP/p/5415472.html
参考:https://www.cnblogs.com/meteoric_cry/p/9637040.html
已知客户端时区为北京+8时区,服务器时间serverTime,对应求cusOffsetDay天后的客户端时间:
/**
* 获取对应 0 时区 的时间
* @param cusTime 时间毫秒
* @param cusOffsetDay 相对于传进来的时间点的天数偏移(如果传0,则表示当前的0点,-1是前一天,1是后一天)
* @return UTC毫秒
*/
public static getClientTime(serverTime: number, cusOffsetDay: number = 0): number {
TimeUtil.gZoneDate.setTime(serverTime);
let cusData: number = TimeUtil.gZoneDate.getDate();
/**设置天数为我们要的(cusOffsetDay)天后的 */
cusData += cusOffsetDay;
TimeUtil.gZoneDate.setDate(cusData);
/**其余时间单位都设置为凌晨时刻 */
TimeUtil.gZoneDate.setHours(0);
TimeUtil.gZoneDate.setMinutes(0);
TimeUtil.gZoneDate.setSeconds(0);
TimeUtil.gZoneDate.setMilliseconds(0);
/**我们想要的服务器对应(cusOffsetDay)天后凌晨的时间戳 */
let serverOffsetTime: number = this.gZoneDate.getTime();
/**服务器时区差:服务器时间与格林威治/0时区相差的分钟数(时区 x 分钟) */
let serverOffsetMinutes: number = this.gZoneDate.getTimezoneOffset();
/**客户端时区差:比如北京 +8 时区 (8时区 = 8小时) */
let clientOffsetMinutes: number = 8 * 60;
/**我们想要的服务器对应(cusOffsetDay)天后凌晨的时间戳 对应 0时区 的时间戳 */
let serverOffsetTimeToZero: number = serverOffsetTime - serverOffsetMinutes * 60 * 1000;
/**我们想要的服务器对应(cusOffsetDay)天后凌晨的时间戳 对应北京 +8 时区 的时间戳 */
let clientTime: number = serverOffsetTimeToZero + clientOffsetMinutes;
return clientTime;
}