使用Javascript将24小时时间转换为12小时时间与上午和下午

Sly*_*hic 57 javascript formatting time datetime

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

February 04, 2011 19:00:00
Run Code Online (Sandbox Code Playgroud)

PS使用jQuery,如果这让它变得更容易!也喜欢简单的函数/代码而不使用Date.js.

Tom*_*Tom 94

这是如何在没有if语句的情况下更改小时数:

hours = ((hours + 11) % 12 + 1);
Run Code Online (Sandbox Code Playgroud)

  • 优秀的思维!var suffix = hours> = 12?"PM": "AM"; 小时=((小时+11)%12 + 1)+后缀; 这也将添加AM/PM. (16认同)
  • 优秀!但是,错过了'简洁'上午/下午部分.:) (2认同)
  • 有人可以解释一下这背后的数学原理吗? (2认同)

aor*_*sik 62

更新2:没有秒选项

更新: AM中午校正后,测试: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"));
Run Code Online (Sandbox Code Playgroud)


小智 36

    //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;
Run Code Online (Sandbox Code Playgroud)


Ver*_*sen 17

对于只想在输出中输入时间的人来说,可以将选项传递给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);
Run Code Online (Sandbox Code Playgroud)

timeString将设置为:

8:00 AM

如果您也需要秒数,请在您的选项中添加"second:'numeric'".对于所有选项,请看这个.


wlo*_*her 6

使用Prototype这是一种相当简洁的方法:

Date.prototype.getFormattedTime = function () {
    var hours = this.getHours() == 0 ? "12" : this.getHours() > 12 ? this.getHours() - 12 : this.getHours();
    var minutes = (this.getMinutes() < 10 ? "0" : "") + this.getMinutes();
    var ampm = this.getHours() < 12 ? "AM" : "PM";
    var formattedTime = hours + ":" + minutes + " " + ampm;
    return formattedTime;
}

然后,您所要做的就是将字符串值转换为日期并使用新方法:

var stringValue = "February 04, 2011 19:00:00;
var dateValue = new Date(stringValue);
var formattedTime = dateValue.getFormattedTime();

或者在一行中:

var formattedTime = new Date("February 04, 2011 19:00:00").getFormattedTime();

  • 我喜欢这个,但是this.getMinutes()<9应该是this.getMinutes()<10 (2认同)

小智 5

function pad(num) {return ("0" + num).slice(-2);}
function time1() {
  var today = new Date(),
    h = today.getHours(),
    m = today.getMinutes(),
    s = today.getSeconds();
    
  h = h % 12;
  h = h ? h : 12; // the hour '0' should be '12'
  clk.innerHTML = h + ':' + 
    pad(m) + ':' + 
    pad(s) + ' ' + 
    (h >= 12 ? 'PM' : 'AM');
}
window.onload = function() {
  var clk = document.getElementById('clk');
  t = setInterval(time1, 500);
}
Run Code Online (Sandbox Code Playgroud)
<span id="clk"></span>
Run Code Online (Sandbox Code Playgroud)


小智 5

保持简单和干净

var d = new Date();
var n = d.toLocaleString();
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/rinu6200/3dkdxaad/#base