【问题标题】:creating date from a timestring in javascript从javascript中的时间字符串创建日期
【发布时间】:2010-09-14 07:48:16
【问题描述】:

我是 javascript 新手,正在尝试比较两个日期值,我得到两个格式的时间值字符串

06:30:47 上午

01:10:47 下午

我需要比较这些以确定第一个是否小于另一个。我不知道如何在 javascript 中执行此操作。有人可以帮忙吗? 哦.h

【问题讨论】:

    标签: javascript time


    【解决方案1】:

    我不认为标准实现可以解析这个。我会这样做:

    function toDate(dateString) {
        var timeComponents = dateString.replace(/\s.*$/, '').split(':');
    
        if (dateString.indexOf("PM") > -1) {
           timeComponents[0] += 12;
        }
    
        var date = new Date();
        date.setHours(timeComponents[0]);
        date.setMinutes(timeComponents[1]);
        date.setSeconds(timeComponents[2]);
    
        return date;
    }
    
    if (toDate('06:30:47 AM') > toDate('01:10:47 PM')) {
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      JavaScript 的指定 日期/时间解析(您可以依赖的跨浏览器)非常有限。很长一段时间以来,规范中没有强制要求单一的字符串日期格式,并且在最近的第 5 版规范中,唯一强制的格式是 ISO-8601(和一些子集)。您还不能依赖已实现第 5 版规范的该部分的浏览器。

      所以你有几个选择:

      1. 自己解析字符串并使用 Date 构造函数,它将日期的各个部分作为数字,例如new Date(year, month, day, hour, minute, second, ...)。 (您只需指定所需数量,例如 new Date(2010, 9, 14) 是 2010 年 9 月 14 日。)

      2. 使用像 Moment 这样已经为您完成工作的库。 Moment 允许您指定要解析的格式。

      【讨论】:

        【解决方案3】:

        使用日期对象。检查这个:http://www.w3schools.com/jsref/jsref_obj_date.asp

        尝试将这两个值放入 Date 变量中并执行以下操作:

        if(var1.valueOf() > var2.valueOf())
        {
          //Do Something
        }
        

        【讨论】:

          【解决方案4】:

          如果您的时间始终采用00:00:00 AM 格式,那么

          var a="06:30:47 AM";
          var b="01:10:47 PM";
          
          var at=parseInt(a.substring(0,8).replace(/(^0+|:)/g,""));
          var bt=parseInt(b.substring(0,8).replace(/(^0+|:)/g,""));
          
          if (a.charAt(9)=="P") {at=at+120000};
          if (b.charAt(9)=="P") {bt=bt+120000};
          
          if (at<bt) {
              // a is smaller
          }
          else
          {
              // a is not smaller
          };
          

          ..应该是跨浏览器和时间/格式安全的。

          【讨论】:

            【解决方案5】:

            我试过这样的

            var ts1="06:30:47 AM";

            var ts2="01:10:47 PM";

            var ds=new Date().toDateString();

            var d1=new Date(ds+" "+ts1);

            var d2=new Date(ds+" "+ts2);

            如果 (!(d2>d1)){

            alert("d1 应该小于 d2");

            }

            这有什么问题吗?

            【讨论】:

              【解决方案6】:
              // specific formatter for the time format ##:##:## #M
              var formatToMiliseconds = function(t){
                  t = t.split(/[:\s]/);
                  t = ((t[0] * 3600000) + (t[1] * 60000) * (t[2] * 1000)); // To ms
                  t = t + (/PM/i.test(t[3]) ? 43200000 : 0); // adjust for AM/PM
                  return t;
              }
              
              var time01 = formatToMiliseconds('06:30:47 AM');
              var time02 = formatToMiliseconds('01:10:47 PM');
              
              alert(time01 > time02); // false
              allert(time01 < time02); // true
              

              作为奖励,您的时间现在与 Date 对象和其他时间计算更加兼容。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-08-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-03-08
                • 1970-01-01
                相关资源
                最近更新 更多