【问题标题】:How can I subtract hours from a HH:MM AM time string in Javascript?如何从 Javascript 中的 HH:MM AM 时间字符串中减去小时数?
【发布时间】:2011-09-15 23:31:48
【问题描述】:

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

8:32 AM

我曾考虑在冒号处拆分字符串,但当从 1:00 AM 减去 3 小时时,我得到 -2:00 AM 而不是所需的 10:00 PM。

【问题讨论】:

    标签: javascript jquery date time


    【解决方案1】:

    最可靠的方法是将其转换为 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 对象接受年/月/日/小时/分钟/秒/毫秒构造函数的毫秒式时间戳,自 1970 年 1 月 1 日起。 p>

    【讨论】:

    • 我能够从其他东西生成一个独特的时间戳,所以这很好用!虽然我还必须将 0 分钟转换为 00 分钟和 if (hour > 12) {hour = hour -12} 以及上午/下午的类似内容。
    【解决方案2】:

    使用moment.js

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

    【讨论】:

    • 以防万一有人希望结果为 24Hr 格式,然后在 .format() 中使用 HH(大写)而不是 hhh。我试过这个:moment("12am", 'hh:mm A').subtract('seconds', 1).format('HHmmss') for 12am 结果是235959。基本上.format() 的格式是你的选择,因为我的是HHmmss :-)
    【解决方案3】:

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

    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];
    

    【讨论】:

    • 1 减 3 时返回负数。
    • 我的结果:"10:30 AM" 如果小时
    【解决方案4】:

    您可以使用代码的平静:

     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())
    

    希望这会有所帮助..

    【讨论】:

    • 错了!,这段代码的结果是2:25,这个时间差真的是:13 h 25 m - 8 h 10 m = 5 h 15 m
    【解决方案5】:

    最难的部分是在你的时间里进行解​​析——我刚刚在 parse 方法的开头添加了 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>
    

    【讨论】:

      【解决方案6】:

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

      // 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
      

      【讨论】:

        【解决方案7】:

        你可以试试像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');
        

        【讨论】:

        • Date.js 不是“一个 jQuery 库”,上面没有回答这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 2011-08-26
        相关资源
        最近更新 更多