Javascript 字符串到日期转换返回NaN

Javascript 字符串到日期转换返回NaN,javascript,datetimepicker,nan,Javascript,Datetimepicker,Nan,我使用的是jquery日期时间选择器插件,它有三个文本框,即startdate、enddate和difference。插件工作正常,startdate字符串(dd/MM/yyyy HH:MM)格式转换正确,但enddate字符串未转换为日期对象,返回NaN。有人能帮我吗? 这是我的密码:- <script type="text/javascript"> $(document).ready(function () { $('#<%= txt

我使用的是jquery日期时间选择器插件,它有三个文本框,即startdate、enddate和difference。插件工作正常,startdate字符串(dd/MM/yyyy HH:MM)格式转换正确,但enddate字符串未转换为日期对象,返回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>

$(文档).ready(函数(){
$(“#”).bootstrapMaterialDatePicker
({
weekStart:0,格式:“DD/MM/YYYY HH:MM”,短时间:true
});
$(“#”).bootstrapMaterialDatePicker
({
weekStart:0,格式:“DD/MM/YYYY HH:MM”,短时间:true
}).on('变更'),功能(e,日期){
$(“#”).bootstrapMaterialDatePicker('setMinDate',date);
});
$('.mb').change(函数(){
var start=$('#').val();
警报('启动:-'+启动);
var end1=$('#').val();
警报('end:-'+end1);
如果(开始!=“”&结束1!=“”){
var-eDate=Date.parse(end1);
var sDate=Date.parse(开始);
警报(sDate);
警报(eDate);//发出警报
var diff=数学abs(eDate-sDate);
警报(差异);
//获取两次之间的总秒数
var delta=diff/1000;
//计算(并减去)整个天数
变量天数=数学下限(增量/86400);
增量-=天数*86400;
//计算(并减去)整小时
var小时=数学地板(增量/3600)%24;
增量-=小时*3600;
//计算(并减去)整分钟
var分钟=数学地板(增量/60)%60;
增量-=分钟*60;
//剩下的是秒
var秒=增量%60;
$('#').val(parseInt(天)+“:”+parseInt(小时)+“:”+parseInt(分钟)+“:”+parseInt(秒));
}
})
});
警报('start:-'+start)开始:-12/11/2017 20:52<代码>警报('end:-'+end1)结束:-13/11/2017 20:54
警报(sDate)给出1513005720000
但发出警报(eDate)
提供NaN

Date.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进行计算。希望这有帮助

此意外行为可能是由于您试图解析的日期字符串格式造成的。如果仔细查看日期字符串,您可以看到

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

还要看一下解释的返回值

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

因此,我尝试了以下操作,得到了
1513022040000
。希望能有帮助

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

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

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

这项工作进行得很顺利。

您能否发布警报声明的输出@我已经更新了这个问题。请看一看,我刚回答。只要让我知道这是否有效。