代码之家  ›  专栏  ›  技术社区  ›  user6258478

字符串到日期转换返回NaN

  •  1
  • user6258478  · 技术社区  · 7 年前

    这是我的代码:-

    <script type="text/javascript">
            $(document).ready(function () {
                $('#<%= txtEndDate.ClientID %>').bootstrapMaterialDatePicker
                ({
                    weekStart: 0, format: 'DD/MM/YYYY HH:mm', shortTime: true
                });
                $('#<%= txtStartDate.ClientID %>').bootstrapMaterialDatePicker
                ({
                    weekStart: 0, format: 'DD/MM/YYYY HH:mm', shortTime: true
                }).on('change', function (e, date) {
                    $('#<%= txtEndDate.ClientID %>').bootstrapMaterialDatePicker('setMinDate', date);
                });
                $('.mb').change(function () {
                    var start = $('#<%= txtStartDate.ClientID %>').val();
                    alert('start:-'+start);
                    var end1 = $('#<%= txtEndDate.ClientID %>').val();
                    alert('end:-'+end1);
    
                    if (start != "" && end1 != "") {
                        var eDate = Date.parse(end1);
                        var sDate = Date.parse(start);
    
                        alert(sDate);
                        alert(eDate);// gives NaN
                        var diff = Math.abs(eDate - sDate);
                        alert(diff);
                        // get total seconds between the times
                        var delta = diff / 1000;
    
                        // calculate (and subtract) whole days
                        var days = Math.floor(delta / 86400);
                        delta -= days * 86400;
    
                        // calculate (and subtract) whole hours
                        var hours = Math.floor(delta / 3600) % 24;
                        delta -= hours * 3600;
    
                        // calculate (and subtract) whole minutes
                        var minutes = Math.floor(delta / 60) % 60;
                        delta -= minutes * 60;
    
                        // what's left is seconds
                        var seconds = delta % 60;
    
                        $('#<%= txtDifference.ClientID %>').val(parseInt(days) + ":" + parseInt(hours) + ":" + parseInt(minutes) + ":" + parseInt(seconds));
                    }
                })
            });
        </script>
    

    alert('start:-'+start); 开始时间:2017年12月11日20:52 alert('end:-'+end1); 结束时间:2017年11月13日20:54 alert(sDate); 给出1513005720000 but alert(eDate); 给NaN

    3 回复  |  直到 7 年前
        1
  •  2
  •   user6258478 user6258478    7 年前

    经过一番研究,受到了 plain javascript 我换成了 moment.js

    var d1 = moment(startDateString, "DD-MM-YYYY HH:mm");
    var d2 = moment(endDateString, "DD-MM-YYYY HH:mm");
    

    这很顺利。

        2
  •  0
  •   trk    7 年前

    日期parse()在不同浏览器之间有一些奇怪的支持。就像在Chrome上解析的一些字符串在FF中返回NaN一样。

    因此,我建议编写一个实用函数,根据您使用的字符串格式组合日期。

    下面是一个基于正则表达式的代码段,用于从字符串中提取dd、mm和yyyy,并将其组成一个日期对象。

    function getTimeFromString (formattedString) {
        var a = formattedString.match(/(\d{2})\/(\d{2})\/(\d{4})\s(\d{2}):(\d{2})/)
        var d = new Date()
        d.setDate(a[1]), d.setMonth[a[2] - 1], d.setYear(a[3]), d.setHours(a[4]), d.setMinutes(a[5])
        return d.getTime()
    }
    

    并且,使用getTimeFromString进行计算。希望这有帮助。

        3
  •  0
  •   Ljiljana Matic    7 年前

    这种意外行为可能是由于您试图解析的日期字符串格式造成的。如果你仔细观察 MDN 日期字符串 您可以看到的解释

    表示RFC2822或(ISO 8601日期的变体)的字符串(可以使用其他格式,但结果可能出乎意料)。

    还要看一下解释的返回值

    如果参数不代表有效日期,则返回NaN。

    所以,我试着跟随并得到了 1513022040000 因此。希望有帮助

    var dateString = new Date('12/11/2017 20:54');
    var result = Date.parse(dateString);
    console.log(result)