本文详解 JavaScript 中的时间处理机制,涵盖 UNIX 时间戳、GMT 与 UTC 的区别及标准字符串格式。通过 Date 构造函数、Date.parse() 和 Date.now() 等核心方法,演示机器时间与人类可读时间的双向转换,帮助开发者在编程中统一时间表示标准。
时间标准与 UNIX 时间戳基础
准备知识
GMT(格林尼治标准时间,Greenwich Mean Time)。UTC(国际协调时间,Universal Time Code)。PST(太平洋标准时间,Pacific Standard Time)。
UTC 的出现晚于 GMT,精度更高,两者差异仅在几秒之内。
UTC 的纪元起点设定为 1970-01-01T00:00:00.000Z,该格式支持毫秒级精度,其中字母 T 和 Z 仅为格式标识。
UNIX 时间戳定义为从 1970-01-01T00:00:00.000Z 至当前时刻的毫秒数(1 秒等于 1000 毫秒)。
本文涉及的时间类型定义如下:
机器时间:即 UNIX 时间戳,记为 mTime。
人类时间:指人类可读的各种时间格式,记为 hTime。
标准字符串时间:格式如 1970-01-01T00:00:00.000Z,记为 stdStrTime。
GMT 时间:格式如 Tue, 15 Aug 2017 13:58:23 GMT,记为 gmtTime。
需求描述
日常表达时间的方式多样,屏幕显示多为字符串形式,且需兼顾国际化差异。例如以下格式均可表示特定时间点:
2017年8月15日20:51:22
2017.08.15
2017-08-15 AM
6/13/2004
January 12, 2004
Tue May 25 2004 00:00:00 GMT-0700
1970-01-01T00:00:00.000Z
上述格式各异,若程序需在指定时间执行任务,需统一标准。计算机编程中通常采用 UNIX 时间戳,因其精确到毫秒且格式唯一,极利于程序处理。
JavaScript Date 核心函数与转换
核心函数
new Date()
参数可为机器时间,若省略参数则传入当前机器时间。返回值为标准字符串时间。
// 参数为空时
var stdStrTime = new Date();
console.log(stdStrTime);
// output: 2017-08-15T14:22:08.385Z
var gmtTime = stdStrTime.toUTCString();
console.log(gmtTime);
// output: Tue, 15 Aug 2017 14:22:08 GMT
// 参数不为空时
var stdStrTime = new Date(1502769188084);
console.log(stdStrTime);
// output: 2017-08-15T03:53:08.084Z
var gmtTime = stdStrTime.toUTCString();
console.log(gmtTime);
// output: Tue, 15 Aug 2017 03:53:08 GMT
也可使用 toGMTString() 方法转换为 GMT 时间,但该方法目前已不推荐使用。
Date.parse()
参数为标准字符串时间,返回值对应机器时间。
var stdStrTime = "2017-08-15T03:53:08.084Z";
var mTime = Date.parse(stdStrTime);
console.log(mTime);
// output: 1502769188084
时间处理核心问题与实现
2个问题
JavaScript 处理时间与其它语言原理相似,核心在于解决两个问题:
将机器时间转换为人类可读时间
将人类可读时间转换为机器时间
获取当前机器时间
console.log(Date.now());
// ouput: 1502802483928
获取当前人类可读时间
var stdStrTime = new Date();
console.log(now);
在 Chrome 环境中,上述代码输出示例为:Tue Aug 15 2017 21:09:46 GMT+0800 (China Standard Time)。在 Node.js 环境中,输出示例为:2017-08-15T13:06:34.806Z。
标准字符串时间转机器时间示例
var stdStrTime = "2004-05-25T00:00:00.000Z";
var mTime = Date.parse(humanTime);
console.log(machineTime);
// output: 1085443200000
机器时间转标准字符串时间示例
var mTime = 1085443200000;
var stdStrTime = new Date(mTime);
console.log(stdStrTime);
// output: 2004-05-25T00:00:00.000Z
参考书籍
《JavaScript 高级程序设计》第三版
以上关于 JS 操作时间与 UNIX 时间戳的介绍即为全部内容,希望能提供参考,欢迎支持本站。