Javascript 尝试在Jquery中获取两个日期之间的周数
我有一个像这样的隐藏形式 HTML 当我在数据库的隐藏输入字段中打印日期时,它是我粘贴在这里的格式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
转换为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)));
});