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

时间:2015-02-16 15:39:47

标签: javascript jquery ecmascript-intl

我需要将javascript日期/时间格式化为:

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);
}

以上代码的输出 2015年2月16日,上午6:31

它很近,但没有雪茄。 如果它有更好的日期格式化实用程序,jQuery也是一个选项。 jQuery虽然,但没有插件,请。

这是一个节省时间的JSFiddle:https://jsfiddle.net/gxze230b/

在输入错字后,输出字符串现在为: 2015年2月16日,上午6:31:00

2 个答案:

答案 0 :(得分:2)

您的代码中有拼写错误。

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

更新了你的小提琴 https://jsfiddle.net/gxze230b/3/

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

似乎现在不支持所有组合。

答案 1 :(得分:0)

感谢@Amitd的指导,我能够制定一种方法,可以产生 2015年2月16日06:31:00 AM的预期输出

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/