时区: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