企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # Date 在JavaScript中,`Date`对象用来表示日期和时间。 要获取系统当前时间,用: ~~~ var now = new Date(); now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); // 2015, 年份 now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月 now.getDate(); // 24, 表示24号 now.getDay(); // 3, 表示星期三 now.getHours(); // 19, 24小时制 now.getMinutes(); // 49, 分钟 now.getSeconds(); // 22, 秒 now.getMilliseconds(); // 875, 毫秒数 now.getTime(); //1435146562875, 获取时间戳,以number形式表示的时间戳,单位是毫秒 ~~~ 如果要创建一个指定日期和时间的`Date`对象,可以用: ~~~ var d = new Date(2015, 5, 19, 20, 15, 30, 123); d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST) ~~~ 你可能观察到了一个非常非常坑爹的地方,就是JavaScript的月份范围用整数表示是0~11,`0`表示一月,`1`表示二月……,所以要表示6月,我们传入的是`5`!这绝对是JavaScript的设计者当时脑抽了一下,但是现在要修复已经不可能了。 第二种创建一个指定日期和时间的方法是解析一个符合[ISO 8601](http://www.w3.org/TR/NOTE-datetime)格式的字符串: ~~~ var d = Date.parse('2015-06-24T19:49:22.875+08:00'); d; // 1435146562875 ~~~ 但它返回的不是`Date`对象,而是一个时间戳。不过有时间戳就可以很容易地把它转换为一个`Date`: ~~~ var d = new Date(1435146562875); d; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) ~~~ # 时区 `Date`对象表示的时间总是按浏览器所在时区显示的,不过我们既可以显示本地时间,也可以显示调整后的UTC时间: ~~~ var d = new Date(1435146562875); d.toLocaleString(); // '2015/6/24 下午7:49:22',本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关 d.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC时间,与本地时间相差8小时 ~~~ 那么在JavaScript中如何进行时区转换呢?实际上,只要我们传递的是一个`number`类型的时间戳,我们就不用关心时区转换。任何浏览器都可以把一个时间戳正确转换为本地时间。 # 时间戳 时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。 > 假设浏览器所在电脑的时间是准确的,那么世界上无论哪个时区的电脑,它们此刻产生的时间戳数字都是一样的,所以,时间戳可以精确地表示一个时刻,并且与时区无关。 所以,我们只需要传递时间戳,或者把时间戳从数据库里读出来,再让JavaScript自动转换为当地时间就可以了。 # 时间格式化显示 > 软件开发过程中,存储时间一般记录自从1970年1月1日0点0分0秒开始至今的秒数(整数)。显示的时候需要把这个整数格式化为可读的方式显示。我们将这一功能编写为一个函数datetime,该函数将输入的毫秒为单位的时间转化为可读格式,因此如果数据库中存储的计量单位是秒,需要乘以1000转换为毫秒。 例如:2019-05-12 22:26:48,转换为时间戳(秒)1557671208 ``` <html> <head> <script> function datetime(date = new Date(), format) { format = format || 'YYYY-MM-DD HH:mm:ss'; const fn = function (d) { return ('0' + d).slice(-2); }; const d = new Date(date); const formats = { YYYY: d.getFullYear(), MM: fn(d.getMonth() + 1), DD: fn(d.getDate()), HH: fn(d.getHours()), mm: fn(d.getMinutes()), ss: fn(d.getSeconds()) }; return format.replace(/([a-z])\1+/ig, function (a) { return formats[a] || a; }); } const date_str = datetime(1557671208000, 'YYYY-MM-DD HH:mm'); console.log(date_str) </script> </head> <body> </body> </html> ``` 控制台输出 ``` 2019-05-12 22:26 ```