moment时区处理心得

时区:https://baike.baidu.com/item/%E6%97%B6%E5%8C%BA/491122?fr=aladdin

时间戳(格林威治时间):https://baike.baidu.com/item/%E6%97%B6%E9%97%B4%E6%88%B3

 

1.转成对应时区日期

    需要注意如果是moment对象格式不能直接操作会修改原始对象的值,遇到最多的地方是时间选择组件,disabledDate传入函数时需要注意使用clone()

 

// 已知东八区 '2019-03-12 00:00:00' 时间戳 1552320000 计算东九区的日期

const time_zone = 9;

moment(1552320000 * 1000).subtract(moment().utcOffset() / 60 - time_zone,'hours').format('YYYY-MM-DD HH:mm:ss');

// 2019-03-12 01:00:00 (即时区差x1h)

 

2.转成对应时区今天 00:00:00

    对应时区的今天不一定是今天00:00:00的时间戳减去时区偏移时间

const time_zone = -11;

const diff = moment().utcOffset() / 60 - time_zone;

moment()

.subtract((24 + (moment().hour() - diff)) % 24, 'hours')

.startOf('hour'); // 算出偏移时区

 

 

3.时间差值

    moment的diff是取整算法,譬如当前时间2019-03-12 01:00:00,那么diff 2019-03-13 00:00:00 就会得到0,可以第二个参数传入true,获取小数位,再用天花板函数

// 和早23个小时diff取天

const today = moment();

const yesterday = moment().subtrct(23,'hours');

today.diff(yesterday,'days') // 0 ???

today.diff(yesterday,'days',true) // 0.9583333333333334 

Math.ceil(today.diff(yesterday,'days')) // 1 那如果是小于0 Math.floor

 

你可能感兴趣的:(React,moment)