【问题标题】:How do I convert human readable hours into milliseconds using javascript?如何使用 javascript 将人类可读的小时数转换为毫秒?
【发布时间】:2013-05-07 23:25:32
【问题描述】:

给定“3:00 AM”或“7:00 PM”,是否有内置函数(如日期)让我将它们转换为毫秒?上午 3:00 表示 3 小时(以毫秒为单位),而下午 7:00 表示 19 小时(以毫秒为单位)。

【问题讨论】:

  • 我可能是错的,但这不包括在:stackoverflow.com/questions/10944396/…
  • @BrianLangbecker,不完全相同,因为当前问题涉及解析时间字符串。它还尝试计算特定时间经过的毫秒数,而不是自午夜以来经过的当前时间。

标签: javascript date timestamp


【解决方案1】:

我认为没有任何内置功能,但是实现您想要的并不复杂。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

首先,创建一个经过 0 毫秒的日期:

var d = new Date(0);

解析您的时间字符串并相应地设置日期的小时数:

var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/),
    h = parseInt(t[1], 10),
    isAm = t[3] === 'AM',
    isMidnight = h === 12 && isAm,
    isNoon = h === 12 && !isAm;

d.setUTCHours(isMidnight? 0 : h + (isAm || isNoon? 0 : 12), parseInt(t[2], 10));

使用getTime 函数获取毫秒数:

console.log(d.getTime()); //10800000

这是一个可重复使用的函数:

function getTimeMilliseconds(timeString) {
    var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/),
        h = parseInt(t[1], 10),
        isAm = t[3] === 'AM',
        isMidnight = h === 12 && isAm,
        isNoon = h === 12 && !isAm;

    return new Date(0).setUTCHours(isMidnight? 0 : h + (isAm || isNoon? 0 : 12), parseInt(t[2], 10));
}

getTimeMilliseconds('3:00 AM');

请注意,您实际上并不需要 Date 对象来实现此目的,但我使用它是因为它会为您计算,但您始终可以使用 hours * 3600000 + minutes * 60000 p>

function getTimeMilliseconds(timeString) {
    var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/),
        h = parseInt(t[1], 10),
        isAm = t[3] === 'AM',
        isMidnight = h === 12 && isAm,
        isNoon = h === 12 && !isAm;

    return (isMidnight? 0 : h + (isAm || isNoon? 0 : 12)) * 3600000 + parseInt(t[2], 10) * 60000;
}

【讨论】:

  • 不适用于12:00 PM(应该是 12 小时,但将被计为 24 小时。)
  • @ColinDeClue,感谢您的反馈,我已修复。
  • 感谢@plalx 的回答。我猜这些函数不是内置的,因为 AM 和 PM 是英文的。
猜你喜欢
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多