【问题标题】:What's a simple way to convert between an am/pm time to 24 hour time in javascript在javascript中将上午/下午时间转换为24小时时间的简单方法是什么
【发布时间】:2009-02-03 20:18:22
【问题描述】:

我一直在玩 jquery,但我遇到了时间问题。我有 3 个时间输入选择框,一个用于小时,一个用于分钟,一个用于子午线。我需要将此时间转换为 24 小时字符串格式,然后将其粘贴到隐藏输入中。

var time = "";
time += $("#EventCloseTimeHour option:selected").text();
time += ":" + $("#EventCloseTimeMin option:selected").text() + ":00";
time += " " + $("#EventCloseTimeMeridian option:selected").text();

$("#ConditionValue").val(time);         

这给了我“下午 1:30:00”,而我需要“13:30:00”。有什么快速的 JavaScript 时间提示吗?

【问题讨论】:

  • 我必须补充一下,我最近发现了 datejs,这太棒了 - 如果你想为单个问题包含整个日期库(如上),你应该考虑一下,但我做了很多日期数学所以它更有用。 datejs.com

标签: javascript jquery time


【解决方案1】:

tj111 建议示例:

$("#ConditionValue").val(
    (
        new Date(
            "01/01/2000 " + 
            $("#EventCloseTimeHour option:selected").text() +
            $("#EventCloseTimeMin option:selected").text() + ":00" +
            " " +
            $("#EventCloseTimeMeridian option:selected").text()
        )
    ).toTimeString().slice(0,8))
;

或者你可以使用:

hour = hour %12 + (meridian === "AM"? 0 : 12);
hour = hour < 10 ? "0" + hour : hour;  

【讨论】:

  • 到目前为止我最喜欢你的,但是我从“toTimeString”中得到了无效的日期,然后它把它切成了“无效”。这是带有 firebug 的 firefox,但它也不适用于 chrome。我认为日期对象不走经络
  • 检查你是否从 jquery 中得到正确的值...如果输入无效你得到一个无效的输出。
  • @some—请不要推荐使用内置解析器进行解析,它依赖于实现并且很容易出错,每个Why does Date.parse give incorrect results? 另外,toTimeString 依赖于实现并且可能不会返回所需的价值。
  • 当然@RobG。你知道我在哪里可以找到我的时间机器的磁通电容器,这样我就可以回到 2009 年 2 月吗?
  • @RobG,我知道有,但是......这个问题是在大约 8.5 年前被问到的,直到大约一个月前一个机器人将链接从 http 更新到 https 之前没有任何活动。我制作了这个答案社区 wiki,因为它只是 tj111 建议的方法的一个示例。我还展示了如何在不使用日期对象的情况下计算小时。因为它被接受了,所以提出问题的人很满意。如果它让您感到困扰,请随时更新此答案。 :-)
【解决方案2】:

您应该查看原生的 JavaScript Date Object 方法。

【讨论】:

  • 有没有办法输入经线(上午/下午)?
  • 如果使用 Date.parse 方法,它接受字符串中的 AM/PM(但需要在其前面加上完整的日期)。
  • 它似乎不适用于日期解析 - 我不断收到无效的日期格式
  • 尝试使用 Date.parse("01/01/2001 12:00 PM"); (时间时间和上午/下午之间需要有一个空格,并且日期必须采用显示的格式)
  • @some—请不要推荐使用内置解析器进行解析,它依赖于实现并且非常容易出错,根据Why does Date.parse give incorrect results?
【解决方案3】:
var time = "";
var hour = Number($("#EventCloseTimeHour option:selected").text())%12 + ($("#EventCloseTimeMeridian option:selected").text() == 'PM'?12:0)) ;


time +=("00"+String(hour)).slice(-2)+":"+ $("#EventCloseTimeMin option:selected").text();

这个解决方案的关键是使用条件运算符“a?b:c”,它转换为“if a then b else c”

【讨论】:

  • 上午 12:xx 仍然中断。你总是必须用 12 来修改时间,然后如果它是 PM,则添加 12。
【解决方案4】:

我得到了几个人的答案。

var time = "";
var hour = Number($("#EventCloseTimeHour option:selected").text());
if($("#EventCloseTimeMeridian option:selected").text() == 'PM'){
    hour = String((hour%12) + 12);
}
hour = hour < 10 ? "0" + hour : hour;
time +=hour+":"+ $("#EventCloseTimeMin option:selected").text() + ":00";

【讨论】:

  • 小时以下 10 应该被零填充。在 24 小时模式下,总是有两位数。
【解决方案5】:

只是为了添加一个简单的 JS 答案,以下将根据初始字符串的长度格式化时间。如果 h:mm 返回 HH:mm,如果 h:mm:ss 返回 HH:mm:ss。

如果始终需要 HH:mm:ss,如果初始字符串中不存在“:00”,则添加默认秒数很简单。

// Change time in h:mm:ss ap to  HH:mm:ss time
// If time missing seconds, returns HH:mm
function timeToHHmm(time) {
  var nums = time.match(/\d+/g);
  var am   = /am/i.test(time);
  nums[0] = ('0' + ((nums[0]%12) + (am? 0 : 12))).slice(-2);
  // If HH:mm:ss required, use following line instead of last
  // return nums.join(':') + (nums.length == 2? ':00' : '');
  return nums.join(':');
}

// Some tests
['2:45am',     // hh:mm only
 '5:15:45pm',  // hh:mm:ss
 '5:15:45 pm', // space before am/pm
 '05:15:45 pm',// leading zero on hour
 '12:02am',
 '12:02 pm',
 '12:02:00am'
 ].forEach(function(time) {
  console.log(time + ' => ' + timeToHHmm(time));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2020-06-30
    • 2015-06-02
    相关资源
    最近更新 更多