首页 > 解决方案 > 格式化Javascript日期时间月份年份

问题描述

我正在尝试将 Javascript 日期时间、年份和月份信息格式化为如下所示:

//"Mon, Nov 5 08:46:20 PM"

为此,我在此处遵循 Mozilla 文档,如下所示:

var options = {
  weekday: 'short',
  month: 'short',
  day: 'numeric',
  hour: "2-digit",
  minute: "2-digit",
  second: "2-digit",
  hour12: true
};
console.log(new Date().toLocaleDateString('en-US', options));
// always returns "Mon, Nov 5, 8:44:10 PM"

尽管我将其指定为“2 位”,但为什么是hour1 位格式?如何实现此问题开头所述的格式?预先感谢您的回答!

标签: javascriptdatetime-format

解决方案


您可以使用RegExpString.prototype.replace() 解决该问题:

const options = {
  weekday: 'short',
  month: 'short',
  day: 'numeric',
  hour: "2-digit",
  minute: "2-digit",
  second: "2-digit",
  hour12: true
};

// Tue, Nov 6, 04:04:55 AM: 
console.log(new Date(1541473495383).toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

// Tue, Nov 6, 10:04:55 AM:
console.log(new Date(1541495095383).toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

// Now:
console.log(new Date().toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

什么.replace(/, (\d):/, ', 0$1:')是:

  • 仅当小时部分有一个数字 ( ) 时才匹配小时部分(逗号和空格之后,冒号之前\d);否则,它将不匹配,也不会替换任何东西。

  • 捕获该数字。

  • 用完全相同的内容替换整个匹配项,但0在小时数字之前添加一个额外的数字,我们可以在替换字符串中将其访问为$1.


推荐阅读