Javascript 尝试在Jquery中获取两个日期之间的周数

Javascript 尝试在Jquery中获取两个日期之间的周数,javascript,jquery,Javascript,Jquery,我有一个像这样的隐藏形式 HTML 当我在数据库的隐藏输入字段中打印日期时,它是我粘贴在这里的格式 转换为ms并除以ms/周 // date1 = $('#startDate').datepicker('getDate'); // date2 = $('#endDate').datepicker('getDate'); function nWeeks(date1, date2) { var WEEK = 1000 * 60 * 60 * 24 * 7; var date1ms

我有一个像这样的隐藏形式

HTML

当我在数据库的隐藏输入字段中打印日期时,它是我粘贴在这里的格式


转换为ms并除以ms/周

// date1 = $('#startDate').datepicker('getDate');
// date2 = $('#endDate').datepicker('getDate');

function nWeeks(date1, date2) {
    var WEEK = 1000 * 60 * 60 * 24 * 7;

    var date1ms = date1.getTime();
    var date2ms = date2.getTime();

    var diff = Math.abs(date2ms - date1ms);

    return Math.floor(diff / WEEK);
}

是关于JS日期对象的参考。

您试图将JS字符串转换为数学表达式中的整数,这将导致NaN

因此,您需要首先执行Date.parse字符串

用你的小提琴会是:

$("input").datepicker();

$('#test').click(function () {
    var end = $('#endDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();
    var start = $('#startDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();

    end = Date.parse( end );
    start = Date.parse( start );

    alert( [end, start] );

    var $weekDiff = Math.floor((end - start + 1) / (1000 * 60 * 60 * 24) / 7);

    alert('Total Weeks :'+$weekDiff);
});
使用es6和一些缩写:

$("input").datepicker();

$('#test').click( () => {
    const [end, start] = ["#endDate", "startDate"]
        .map( e => Date.parse( e.datepicker({ dateFormat: 'dd-mm-yyyy'}).val() ) );

    const diff = Math.floor((end - start + 1) / (1000 * 60 * 60 * 24) / 7);
    console.log('Total Weeks :' + diff);
});

你可以试试这样的

$("input").datepicker();

$('#test').click(function () {
    var end = $('#endDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();
    var start = $('#startDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();

    var $weekDiff = Math.floor((end - start + 1) / (1000 * 60 * 60 * 24) / 7);

    alert(daydiff(parseDate(start), parseDate(end)));
});



function parseDate(str) {
    var mdy = str.split('/')
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daydiff(first, second) {
    return Math.round((second-first)/(1000*60*60*24) / 7);
}

更新您的

以下是一个简单的方法:

$input.datepicker $'test'。单击,=>{ const end=$'endDate'。日期选择器'getDate', 开始=$'startDate'。日期选择器'getDate', $weekDiff=Math.floorend-start+1/1000*60*60*24/7; $'total'.html$weekDiff } 第一次约会 第二次约会 点击它 总周数

这对我很有效

$('#test').click(function () {
    var end = $('#endDate').datepicker({dateFormat: 'dd-mm-yyyy'}).val();
    var start = $('#startDate').datepicker({dateFormat: 'dd-mm-yyyy'}).val();
    var aDate1 = end.split('-');
    var aDate2 = start.split('-');
    end = Date.UTC(aDate1[2], aDate1[1] - 1, aDate1[0]);
    start = Date.UTC(aDate2[2], aDate2[1] - 1, aDate2[0]);
    alert(Math.floor((end - start) / (1000 * 60 * 60 * 24)));
});

那么问题出在哪里呢?不需要自己滚动日期。。。标准中已经有一个实现:Date.parse@Centril已经有一个由datepicker实现的方法@carstenLovboAndersen我试过检查你的小提琴,但结果还是没法NaN@Vikram如果你只是点击按钮而不拿东西,它会返回不,但如果你选择了什么,它会做什么work@CarstenLøvboAndersen实际上,我是从PHP变量及其格式mm/dd/yyyy中获取日期,并将其放入隐藏输入类型中。你能给我看一下这一点吗?因为当我尝试使用它时,它仍然会提醒NanNan是哪一个,es6还是其他?当我使用普通JS从2个输入中选择2个日期时,这对我很有用。我没有测试es6,但它只是一个缩短。注意:在您输入2个日期之前,它将不起作用。选择2个日期后,您发布的小提琴对我来说可以正常工作。这就是问题所在,我从一个php变量中获取这两个值,这个输入框是隐藏的,日期是29-10-2015和29-12-2015,但是如果我将这个日期静态地放在html中,Js返回NaN,你运行我的代码片段了吗?如果你愿意,我可以把它作为Wellro放在小提琴上,但在这种情况下,它应该显示8周是对的,如果我没有错,为什么它仍然显示0好,我发现了问题。。问题是日期像2015年10月12日,应该是2015年10月12日,请看我的最新小提琴。
$("input").datepicker();

$('#test').click(function () {
    var end = $('#endDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();
    var start = $('#startDate').datepicker({ dateFormat: 'dd-mm-yyyy'}).val();

    var $weekDiff = Math.floor((end - start + 1) / (1000 * 60 * 60 * 24) / 7);

    alert(daydiff(parseDate(start), parseDate(end)));
});



function parseDate(str) {
    var mdy = str.split('/')
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daydiff(first, second) {
    return Math.round((second-first)/(1000*60*60*24) / 7);
}
$('#test').click(function () {
    var end = $('#endDate').datepicker({dateFormat: 'dd-mm-yyyy'}).val();
    var start = $('#startDate').datepicker({dateFormat: 'dd-mm-yyyy'}).val();
    var aDate1 = end.split('-');
    var aDate2 = start.split('-');
    end = Date.UTC(aDate1[2], aDate1[1] - 1, aDate1[0]);
    start = Date.UTC(aDate2[2], aDate2[1] - 1, aDate2[0]);
    alert(Math.floor((end - start) / (1000 * 60 * 60 * 24)));
});