Sunshine168 / resume

My resume
3 stars 1 forks source link

时区问题 #14

Open Sunshine168 opened 6 years ago

Sunshine168 commented 6 years ago

最近有处理到关于时区的问题,这里做一个记录。

首先,我们一般在处理的时间的时候会用到时间戳,然而时间戳本身是不具有时区的概念。

eg:

const ts = 1534246614831

//在系统设置为中国时间的时候。
console.log(new Date(1534246614831)) //Tue Aug 14 2018 19:36:54 GMT+0800 (中国标准时间)

//在系统设置为巴西时间的时候 
console.log(new Date(1534246614831))//Tue Aug 14 2018 08:36:54 GMT-0300 (巴西利亚标准时间)

 //所以,时间在展示给用户的时候需要按照一个规定的时区进行转化(由我们提供给他们选择),将时间戳格式成当地的时间。

/**
 * @function formatedTime2DateByZone
 * @param {number} timestamp 需要转换的时间戳
 * @param {number} targetTimezoneOffset 需要偏移的时区
 * @param {boolean} reverse 是否反转
 * @returns {Date}
 */
export const formatedTime2DateByZone = (
  timestamp,
  targetTimezoneOffset,
  reverse
) => {
  const date = new Date(timestamp);
  const currentTimezoneOffset = new Date().getTimezoneOffset() / 60;
  let timezoneoffset;
  if (!reverse) {
    timezoneoffset = currentTimezoneOffset - targetTimezoneOffset;
  } else {
    timezoneoffset = targetTimezoneOffset - currentTimezoneOffset;
  }

  return addHours(date, timezoneoffset);
};