如何从Javascript中的HH:MM AM时间字符串中减去小时数?

时间:2011-06-15 23:43:48

标签: javascript jquery date time

从格式化的时间字符串中减去几个小时的最佳方法是什么:

8:32 AM

我考虑过将字符串拆分为冒号,但是当从1:00 AM减去3小时后,我会在凌晨2:00而不是所需的10:00 PM。

7 个答案:

答案 0 :(得分:18)

最可靠的方法是将其转换为JS日期对象,然后对此进行数学计算

var olddate = new Date(2011, 6, 15, 8, 32, 0, 0); // create a date of Jun 15/2011, 8:32:00am

var subbed = new Date(olddate - 3*60*60*1000); // subtract 3 hours

var newtime = subbed.getHours() + ':' + subbed.getMinutes(); 

Date对象接受构造函数的年/月/日/小时/分钟/秒/毫秒一个unix样式的时间戳,单位为毫秒 - 自1970年1月1日起。

答案 1 :(得分:9)

使用moment.js

moment("8:32 AM", 'h:mm A').subtract('hours', 2).format('h:mm A')

答案 2 :(得分:2)

如果您只想玩几小时,我认为以下内容对您来说很容易:

var timeStr = '1:30 PM'
var parts = timeStr.split(':');
var hour = parseInt($.trim(parts[0]));
hour -= 3;

if(hour <= 0){
        // easily flip it by adding 12
    hour += 12;

    // swap am & pm
        if(parts[1].match(/(AM|am)/)){
        parts[1] = parts[1].replace('AM', 'PM').replace('am', 'pm')
            // keep the case
        } else {
            parts[1] = parts[1].replace('PM', 'AM').replace('pm', 'am')
        }
}

// final answer
timeStr = hour + ':' + parts[1];

答案 3 :(得分:0)

你可以使用代码的和平:

 var T1=new Date("September 5, 2005 8:10:00");
var T2=new Date("September 5, 2005 13:35:00");
var diff=new Date();
diff.setTime(T2-T1);
alert(diff.getHours()+":"+diff.getMinutes())

希望这会有所帮助..

答案 4 :(得分:0)

最难的部分是在你的时间解析 - 我刚刚将2009年1月1日添加到解析方法的开头,以便它很好地解析它而你不需要自己编写。 (不是很困难)。将以下代码折叠为几行 - 展开以显示步骤。

<html>
<head>
    <script type="text/javascript">
        function calculateTime(stringTime) {
            var hoursToSubtract = 1;
            var oldTime = Date.parse('Jan 1, 2009 ' + stringTime);
            var newTime = new Date(oldTime - 1000 * 60 * 60 * hoursToSubtract);
            var hours = newTime.getHours();
            var minutes = newTime.getMinutes();
            var designation = "PM";
            if ((hours == 0 || hours == 24) && minutes == 0)
                designation = 'MIDNIGHT';
            else if (hours == 12 && minutes == 0)
                designation = 'NOON'
            else if (hours < 12)
                designation = 'AM';
            else
                hours -= 12;

            document.write('new time = ' + hours + ':' + minutes + ' ' + designation );
        }
    </script>
</head>
<body>
    <script type="text/javascript">
        calculateTime('8:30 AM');
        calculateTime('8:30 PM');
        calculateTime('12:10 PM');
    </script>
</body>
</html>

答案 5 :(得分:0)

在正确的轨道上有很多答案,还需要考虑一下:

// Assumes timeString is hh:mm am/pm
function addHours(timeString, h) {
  var t = timeString.match(/\d+/g);
  var am = /am$/.test(timeString);
  var d = new Date();
  d.setHours(+t[0] + (am? 0 : 12) + +h, +t[1]);
  return formatTime(d.getHours() + ':' + d.getMinutes());
}
function formatTime(t) {
  function addZ(n) {
    return n<10? '0'+n : ''+n;
  }

  var t = t.split(':');
  var m = (t[0] > 12)? 'pm' : 'am';

  return addZ(t[0]%12 || t[0]) + ':' + addZ(t[1]) + ' ' + m;
}

 alert( addHours('12:15 am', -13) ); // 11:15 pm

答案 6 :(得分:-1)

您可以尝试像DateJs这样的jQuery库。以下是该链接显示的一些示例:

// Number fun
(3).days().ago();

// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');