UTC时间,本地时间,moment,时间 详解

一、背景

  1. utc时间和北京时间:
    utc:世界协调时,以英国格林威治时间为准
    utc时间和北京时间相差8小时;
    北京时间:2021-1-1 22:18 <==> utc时间:2021-1-1 14:18

  2. 时间戳timestamp
    概念:某个utc时间到utc1970-1-1凌晨经过的毫秒数
    北京时间:1970-1-1 00:08:00 时间戳 0
    utc时间:1970-1-1 00:00:00 时间戳 0

  3. 对服务器的影响:
    服务器可能部署到任何国家,服务器内部应使用utc时间或时间戳,包括数据库。

  4. 对客户端的影响:
    客户端要给用户看,应该吧时间戳或utc时间转换为本地时间
    在这里插入图片描述

二、moment基本使用

//   cnpm i moment -S
const moment = require('moment')
moment.locale("zh-cn") //中文

//得到当前时间
console.log('得到当前时间')
console.log(moment().toString())
console.log(moment.utc().toString())

//得到时间戳 是同一个时刻(运行时间会算进去)
console.log('得到时间戳 是同一个时刻(运行时间会算进去)')
console.log(moment().valueOf())
console.log(moment.utc().valueOf())

//根据指定时间格式得到时间 时间格式:YYYY-MM-DD YYYY/MM/DD ...
console.log('根据指定时间格式得到时间 时间格式:YYYY-MM-DD YYYY/MM/DD ...')
const val = "1970-01-01 00:00:00"
console.log(moment(val).toString(), +moment(val))
console.log(moment.utc(val).toString(), +moment.utc(val))
//根据打印结果可知,相同时间,实际代表的日期不同(时间戳不同),所以要规定使用utc时间统一

//使用日期令牌转换
console.log('使用日期令牌转换')
//令牌是一个格式化的字符串,例如: "YYYY-MM-DD HH:mm:ss"
const formats = ["YYYY-MM-DD HH:mm:ss", "YYYY-M-D H:m:s", "x"];
console.log(moment.utc("1970-01-01 00:00:00", formats, true).toString());
console.log(moment.utc("1970-1-1 0:0:0", formats, true).toString());
console.log(moment.utc(0, formats, true).toString());
const invalidMoment = moment.utc(
  "Thu Jan 01 1970 00:00:00 GMT+0000",
  formats,
  true
);
console.log(invalidMoment.isValid()); //判断是否是有效日期: false
console.log(invalidMoment.toString());
console.log(+invalidMoment);

// 显示(发生在客户端)
console.log('显示(发生在客户端)')
let m = moment.utc("2015-1-5 23:00:01", formats, true);
// utc时间转换本地时间
console.log(m.local().format("YYYY年M月D日 HH点mm分ss秒"));
 
 m = moment("2015-1-5 23:00:01", formats, true);
 //本地时间转化utc时间传给服务器
const toServer = m.utc().format("YYYY-MM-DD HH:mm:ss");
console.log(toServer);

 m = moment("2021-8-31 23:40:01", formats, true);
console.log(m.local().fromNow(),m);

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐