将以下 JSON 返回值从 24 小时格式转换为 12 小时格式(带 AM 和 PM)的最佳方法是什么?日期应该保持不变——时间是唯一需要格式化的东西。
February 04, 2011 19:00:00
PS 使用 jQuery 如果它更容易的话!也更喜欢简单的函数/代码而不是使用 Date.js。
将以下 JSON 返回值从 24 小时格式转换为 12 小时格式(带 AM 和 PM)的最佳方法是什么?日期应该保持不变——时间是唯一需要格式化的东西。
February 04, 2011 19:00:00
PS 使用 jQuery 如果它更容易的话!也更喜欢简单的函数/代码而不是使用 Date.js。
这是您可以在没有 if 语句的情况下更改时间的方法:
hours = ((hours + 11) % 12 + 1);
更新 2:没有秒选项
更新:中午更正后上午,测试:http : //jsfiddle.net/aorcsik/xbtjE/
我创建了这个函数来做到这一点:
function formatDate(date) {
var d = new Date(date);
var hh = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
var dd = "AM";
var h = hh;
if (h >= 12) {
h = hh - 12;
dd = "PM";
}
if (h == 0) {
h = 12;
}
m = m < 10 ? "0" + m : m;
s = s < 10 ? "0" + s : s;
/* if you want 2 digit hours:
h = h<10?"0"+h:h; */
var pattern = new RegExp("0?" + hh + ":" + m + ":" + s);
var replacement = h + ":" + m;
/* if you want to add seconds
replacement += ":"+s; */
replacement += " " + dd;
return date.replace(pattern, replacement);
}
alert(formatDate("February 04, 2011 12:00:00"));
//it is pm if hours from 12 onwards
suffix = (hours >= 12)? 'pm' : 'am';
//only -12 from hours if it is greater than 12 (if not back at mid night)
hours = (hours > 12)? hours -12 : hours;
//if 00 then it is 12 am
hours = (hours == '00')? 12 : hours;
对于只想要输出中的时间的任何人,您可以将选项传递给 JavaScript 的 Date::toLocaleString() 方法。例子:
var date = new Date("February 04, 2011 19:00:00");
var options = {
hour: 'numeric',
minute: 'numeric',
hour12: true
};
var timeString = date.toLocaleString('en-US', options);
console.log(timeString);
timeString 将设置为:
8:00 AM
如果您也需要秒,请将“second: 'numeric'”添加到您的选项中。对于所有选项,请参阅此。
这是使用 Prototype 的一种相当简洁的方法:
Date.prototype.getFormattedTime = function () {
var hours = this.getHours() == 0 ? "12" : this.getHours() > 12 ? this.getHours() - 12 : this.getHours();
var 分钟 = (this.getMinutes() < 10 ? "0" : "") + this.getMinutes();
var ampm = this.getHours() < 12 ? “上午下午”;
var formattedTime = 小时 + ":" + 分钟 + " " + ampm;
返回格式化时间;
}
然后您所要做的就是将字符串值转换为日期并使用新方法:
var stringValue = "2011 年 2 月 4 日 19:00:00; var dateValue = new Date(stringValue); var formattedTime = dateValue.getFormattedTime();
或者在一行中:
var formattedTime = new Date("2011 年 2 月 4 日 19:00:00").getFormattedTime();