我尝试使用JavaScript返回两个日期之间的周数。
所以我有以下变量:
var date = new Date();
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
if(day < 10) { day= '0' + day; }
if(month < 10) { month = '0' + month; }
var dateToday = day + '/' + month + '/' + year;
var dateEndPlacement = '22/06/2014';
如果小于10,我还会将日期和月份的前缀加上0。不确定这是否是正确的方法......所以欢迎其他想法。
然后我将这两个日期传递给以下函数:
function calculateWeeksBetween(date1, date2) {
// The number of milliseconds in one week
var ONE_WEEK = 1000 * 60 * 60 * 24 * 7;
// Convert both dates to milliseconds
var date1_ms = date1.getTime();
var date2_ms = date2.getTime();
// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms);
// Convert back to weeks and return hole weeks
return Math.floor(difference_ms / ONE_WEEK);
}
然而我收到错误:
Uncaught TypeError: Object 04/04/2014 has no method 'getTime'
任何想法我做错了什么?
对于那些要求/要求的人,我正在调用这样的函数:
calculateWeeksBetween(dateToday, dateEndPlacement);
答案 0 :(得分:5)
我建议使用moment.js来做这件事。
但是如果你想在纯JavaScript中这样做,我会怎么做:
function weeksBetween(d1, d2) {
return Math.round((d2 - d1) / (7 * 24 * 60 * 60 * 1000));
}
然后用
打电话weeksBetween(new Date(), new Date(2014, 6, 22));
答案 1 :(得分:4)
您将日期存储为字符串('22/06/2014'
)。 getTime
是Date
的一种方法。您需要为日期创建Date
个对象,并将它们传递给函数。
var dateToday = new Date(year, month - 1, day);
var dateEndPlacement = new Date(2014, 5, 22);
calculateWeeksBetween(dateToday, dateEndPlacement);
正如@Mosho所说,您也可以直接减去日期,而不使用getTime
。
答案 2 :(得分:1)
您应该将 dateToday 和 dateEndPlacement 转换为日期类型。 请阅读Converting string to date in js
答案 3 :(得分:0)
减去日期(未格式化,是自1970年1月1日00:00:00以来经过的秒数),除以604,800,000(每周毫秒数)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
答案 4 :(得分:0)
您可以使用一下它本身具有的所有功能,这些功能我已经在下面提到的代码中很好地发挥了作用
var a = moment(a, 'DD-MM-YYYY');
var b = moment(b, 'DD-MM-YYYY');
days=b.diff(a, 'week');
别忘了使用一下js CDN
答案 5 :(得分:0)
如果您需要到日期之间的实际星期数,而不是它们之间的7天数:
const week = 7 * 24 * 60 * 60 * 1000;
const day = 24 * 60 * 60 * 1000;
function startOfWeek(dt) {
const weekday = dt.getDay();
return new Date(dt.getTime() - Math.abs(0 - weekday) * day);
}
function weeksBetween(d1, d2) {
return Math.ceil((startOfWeek(d2) - startOfWeek(d1)) / week);
}