我正在尝试将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位数格式?如何获得本问题开头所述的格式?预先感谢您的回答!
答案 0 :(得分:1)
您可以使用RegExp和String.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
的形式访问。