使用 Javascript 将 24 小时制转换为 12 小时制

IT技术 javascript datetime time formatting
2021-02-08 06:53:40

将以下 JSON 返回值从 24 小时格式转换为 12 小时格式(带 AM 和 PM)的最佳方法是什么?日期应该保持不变——时间是唯一需要格式化的东西。

February 04, 2011 19:00:00

PS 使用 jQuery 如果它更容易的话!也更喜欢简单的函数/代码而不是使用 Date.js。

6个回答

这是您可以在没有 if 语句的情况下更改时间的方法:

hours = ((hours + 11) % 12 + 1);
优秀的!但是,缺少“简洁”的 AM/PM 部分。:)
2021-03-25 06:53:40
有人可以解释这背后的数学吗?
2021-04-01 06:53:40
好思维!!!var 后缀 = 小时 >= 12 ? "下午":"上午"; 小时 = ((小时 + 11) % 12 + 1) + 后缀;这也将添加 AM/PM。
2021-04-02 06:53:40
@Pat8 % 是 mod 操作。例如,假设现在是 23:00。我们将添加 23 + 11 = 34。34 % 12 = 10 因为 34 / 12 是 2,余数为 10。最后,添加 + 1 得到 11,这是 23:00 的正确转换。
2021-04-10 06:53:40

更新 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"));

您的函数将中午后的小时显示为“am”而不是“pm”。
2021-03-26 06:53:40
@Slynthic 添加了设置秒开/关的部分。
2021-04-08 06:53:40
@mindplay.dk 不。在那部分之后,有一个if (h == 0) { h = 12; }This 处理 0-s。
2021-04-08 06:53:40
摆脱秒数的最佳方法是什么(例如仅显示 7:00 PM)?抱歉,我在原始帖子中没有更详细,而且我的 JS 非常少!我尝试删除“+s”,但它只是将秒数添加到 AM/PM 的末尾。再次感谢!
2021-04-11 06:53:40
PM 的第一个小时返回为 0,这仍然是不正确的 - 它应该显示为 12。您需要在if (h >=12)内添加一个子句,例如if (h != 12) h = hh-12应该可以解决问题。
2021-04-11 06:53:40
    //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'”添加到您的选项中。对于所有选项,请参阅

它工作得很好,但只有一次我们可以尝试这个新的: new Date().toLocaleTimeString('en-US');
2021-03-23 06:53:40
完美,这正是我要找的。
2021-04-04 06:53:40

这是使用 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();
我喜欢这个,但是 this.getMinutes() < 9 应该是 this.getMinutes() < 10
2021-03-26 06:53:40