字符串到日期转换返回NaN

时间:2017-11-12 15:14:47

标签: javascript datetimepicker nan

我正在使用jquery日期时间选择器插件,并有三个文本框即,startdate,enddate,difference。插件工作正常,startdate字符串(dd / MM / yyyy HH:mm)格式转换正确但enddate字符串不会转换为Date对象,它返回NaN。谁能帮我? 这是我的代码: -

<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);开始:-12/11/2017 20:52 alert('end:-'+end1);结束:-13/11/2017 20:54 alert(sDate);给出1513005720000 but alert(eDate);给出了NaN

3 个答案:

答案 0 :(得分:1)

经过一些研究并受到plain javascript的骚扰,我转而moment.js瞧!我得到了有效日期差异的结果。我刚用: -

替换了我的javascript代码
var d1 = moment(startDateString, "DD-MM-YYYY HH:mm");
var d2 = moment(endDateString, "DD-MM-YYYY HH:mm");

这很顺利。

答案 1 :(得分:0)

Date.parse()在浏览器中有一些奇特的支持。就像在Chrome上解析的一些字符串一样,在FF中返回NaN。

因此,我建议编写一个实用程序函数,用您从正在使用的字符串格式组成日期。

这是一个基于正则表达式的片段,用于从字符串中提取dd,mm和yyyy并将其组合为Date对象。

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进行计算。希望这可以帮助。

答案 2 :(得分:0)

这种意外行为可能是由于您尝试解析的日期字符串格式造成的。如果仔细查看MDN dateString 说明,可以看到

  

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

另请参阅解释的返回值

  

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

所以,我尝试过关注并获得1513022040000作为结果。希望它有所帮助

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