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

Cam*_*ron 2 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';
Run Code Online (Sandbox Code Playgroud)

如果它们小于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);
}
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

Uncaught TypeError: Object 04/04/2014 has no method 'getTime'

我有什么想法我做错了吗?

对于那些要求/要问的人,我正在调用这样的函数:

 calculateWeeksBetween(dateToday, dateEndPlacement);
Run Code Online (Sandbox Code Playgroud)

bre*_*ell 5

您将日期存储为字符串 ( '22/06/2014')。getTime是一种方法Date。您需要Date为日期创建对象,并将它们传递给函数。

var dateToday = new Date(year, month - 1, day);
var dateEndPlacement = new Date(2014, 5, 22);

calculateWeeksBetween(dateToday, dateEndPlacement);
Run Code Online (Sandbox Code Playgroud)

正如@Mosho 所指出的,您也可以直接减去日期,而无需使用getTime.


Jac*_*lan 5

我建议使用moment.js来做这种事情.

但是,如果你想在纯JavaScript中这样做,我会怎么做:

function weeksBetween(d1, d2) {
    return Math.round((d2 - d1) / (7 * 24 * 60 * 60 * 1000));
}
Run Code Online (Sandbox Code Playgroud)

然后打电话给

weeksBetween(new Date(), new Date(2014, 6, 22));
Run Code Online (Sandbox Code Playgroud)

  • 这就是计算一周长度的方法。7天*24小时*60分钟*60秒*1000毫秒。 (3认同)

Mos*_*sho 1

减去日期(未格式化,是自 1970 年 1 月 1 日 00:00:00 以来经过的秒数),除以 604,800,000(每周毫秒数)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date