使用JavaScript的两个日期之间的周数

时间:2014-04-04 10:05:33

标签: javascript

我尝试使用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);

6 个答案:

答案 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')。 getTimeDate的一种方法。您需要为日期创建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);
}