【问题标题】:string to date conversion returns NaN字符串到日期的转换返回 NaN
【发布时间】:2017-11-12 15:14:47
【问题描述】:

我正在使用一个 jquery 日期时间选择器插件,并且有三个文本框,即开始日期、结束日期、差异。插件完美运行,开始日期字符串(dd/MM/yyyy HH:mm)格式被正确转换,但结束日期字符串没有被转换为日期对象,它返回 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:52alert('end:-'+end1); 结束:-13/11/2017 20:54 alert(sDate); 给 1513005720000 but alert(eDate); 给出 NaN

【问题讨论】:

  • 能否请您发布警报语句的输出...?
  • @82Tuskers 我已经更新了这个问题。请看一下。
  • 我刚刚回答了。只要让我知道这是否有效。

标签: javascript datetimepicker nan


【解决方案1】:

经过一些研究并被plain javascript 骚扰后,我切换到moment.js,瞧!我得到了有效日期差异的结果。我刚刚将我的 javascript 代码替换为:-

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

这很顺利。

【讨论】:

    【解决方案2】:

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

    所以,我建议编写一个实用函数,根据您正在使用的字符串格式组成您的日期。

    这是一个基于正则表达式的 sn-p,用于从字符串中提取 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 进行计算。希望这可以帮助。

    【讨论】:

      【解决方案3】:

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

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

      还要看看返回值的解释

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

      所以,我尝试关注并得到1513022040000 作为结果。希望对你有帮助

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

      【讨论】:

        猜你喜欢
        • 2013-07-25
        • 1970-01-01
        • 2019-07-13
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2021-09-19
        • 1970-01-01
        相关资源
        最近更新 更多