格式化Javascript日期时间月份年份

时间:2018-11-06 01:49:18

标签: javascript datetime-format

我正在尝试将Javascript日期时间,年和月信息格式化为以下格式:

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

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

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"

尽管我将hour指定为“ 2位数”,但为什么仍为1位数格式?如何获得本问题开头所述的格式?预先感谢您的回答!

1 个答案:

答案 0 :(得分:1)

您可以使用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的形式访问。

    li>