Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript 显示 Y-m-d H:i:s 的日期时间格式

  最近有一个需求是在前端处理并显示一个人类易读的时间日期格式,而且是面向中国大陆的用户(其实就是 PHP 的 date('Y-m-d H:i:s') 这样的结构)。对时间显示做处理以前已经做过很多很多,但每次都会写出一大坨代码。这回突然想装个逼,想用点非主流的方式实现。
  一直以来我都是从 date 对象中逐个取出这些部份再拼接起来的,再用正则给数字加零前导。比如:
<script> let date = new Date(); let result = [ [ date.getFullYear(), date.getMonth() + 1, date.getDate() ].join('-'), [ date.getHours(), date.getMinutes(), date.getSeconds() ].join(':') ].join(' ').replace(/\b\d\b/g, '0$&'); document.write(result); </script>   但是这一坨代码也是醉了!所以我就想装个逼,寻找一个更简单的方式。
  我曾经想从 ISO 格式的时间字符串中匹配出这个格式,比如这样:
<script> let date = new Date(); let result = date.toISOString().replace(/(.*)T([\d:]+).*/, '$1 $2'); document.write(result); </script>   这个结果的格式确实是正确的,但由于 toISOString 的时区处理是基于浏览器实现的(比如 Chrome 的 toISOString 就总是返回以 Z 结尾的 UTC 时间,完全无视系统时区),所以这个方法得到的时间可能会丢失时区信息。
  既然问题出在时区上,我就想使用 I18N 的方式来解决。下面是目前的最终装逼版:
<script> var date = new Date(); var result = date.toLocaleString('zh-CN', { hour12: false }) .replace(/\//g, '-').replace(/\b\d\b/g, '0$&'); document.write(result); </script>
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^