使用 ECMAScript 国际化格式化日期和时间 API

Formatting Date and Time With ECMAScript Internationalization API

我需要一个 javascript date/time 格式如下:

2015 年 2 月 16 日06:31:00上午

我打算使用 toLocaleTimeString 和一些选项,但我在下面尝试的代码似乎在 Chrome 中不起作用。

function getFormattedDateTime(dateTimeToFormat) {
dateTimeToFormat = new Date(dateTimeToFormat);
var monthOptions = {
    month: 'long', year: 'numeric', day: 'numeric',
    hour: '2-digit', minute: '2-digit', second: '2-digit'
};

return dateTimeToFormat.toLocaleTimeString('en-us', monthOptions);
}

以上代码的输出是February 16, 2015, 6:31 AM

很接近,但没有雪茄。 jQuery 也是一个选项,如果它有任何更好的日期格式化实用程序。 jQuery 仅此而已,请不要插件。

这里有一个 JSFiddle 可以节省一些时间:https://jsfiddle.net/gxze230b/

拼写错误更正后,输出字符串现在为:February 16, 2015, 6:31:00 AM

您的代码中有错字..

而不是 seconds: '2-digit' 应该是 second: '2-digit'

更新了你的fiddle https://jsfiddle.net/gxze230b/3/

编辑:找了一段时间后认为最好使用这里给出的答案
Where can I find documentation on formatting a date in JavaScript?

目前似乎不支持所有组合。

感谢@Amitd 的指导,我能够制定一个方法来产生 February 16, 2015 06:31:00 AM[=12= 的预期输出]

function getFormattedDateTime(dateTimeToFormat) {dateTimeToFormat = new Date(dateTimeToFormat);

var zeroPad = function (val) {
    return (val <= 9 ? '0' + val : '' + val);
};

var month = dateTimeToFormat.toLocaleString('en-us', {month: "long"});
var day = dateTimeToFormat.getDate();
var year = dateTimeToFormat.getFullYear();

var hour = ((dateTimeToFormat.getHours() + 11) % 12 + 1);
var minutes = dateTimeToFormat.getMinutes();
var seconds = dateTimeToFormat.getSeconds();
var suffix = (hour <= 12) ? 'AM' : 'PM';

return month + ' ' + zeroPad(day) + ', ' + year + ' ' + zeroPad(hour) + ':' + zeroPad(minutes) + ':' + zeroPad(seconds) + ' ' + suffix;
}

JSFiddle:https://jsfiddle.net/puddinman13/L0128fL9/