如何计算和检查双周约会

How to calculate and check for a bi-weekly date

我真的需要你的帮助,

假设我的分界开始日期是:2016 年 12 月 19 日,由变量 x

定义

我如何编写一个 JavaScript 函数,以便它将当前日期与 x 和当前日期与从 [=12 起的 (14) 天的重复日期进行比较=] 由变量 y.

定义
var y = recurrence is every 14 days, thereafter from the date (x) with no end date specified (unlimited)

例如

function() {

    if (present date == x) { alert(true) }

    if (present date == y) { alert(true) }

}

如果 Date.now() == 1482181410856,从现在起 14 天将是 1482181410856 + (14 * 24 * 60 * 60 * 1000) == 1483391010856

let y = new Date(Date.now() + (14 * 24 * 60 * 60 * 1000));
console.log(y.toUTCString()); // "Mon, 02 Jan 2017 21:03:30 GMT"

假设您真的想比较精确 日期,即以毫秒为单位,那么:

var present_date = new Date();
if(present_date.getTime() === x.getTime()) alert("Today is the same date as x");
else {
    var y = new Date(x.getTime());
    y.setDate(y.getDate() + 14); // add 14 days
    if(present_date.getTime() === y.getTime()) alert("Today is the same date as y");
}

但大多数时候我们希望将日期作为全天而不是毫秒进行比较,因此您必须比较 范围 (从午夜到 11:59PM )... 在那种情况下,我建议使用图书馆让您的生活更轻松 - 例如 moment.js...

希望对您有所帮助!

这可能是 Add +1 to current date 的副本。

如果您有一个开始日期,比如 2016 年 12 月 20 日,您可以通过简单地将日期加上 14 天来计算该日期之后的 14 天。然后您可以检查今天的日期是否是这些日期中的任何一个,例如

// Create a Date for 20 December, 2016 with time 00:00:00
var startDate = new Date(2016,11,20);

// Create a Date for the start + 14 days with time 00:00:00
var startPlus14 = new Date(startDate);
startPlus14.setDate(startPlus14.getDate() + 14);

// Get today and set the time to 00:00:00.000
var today = new Date();
today.setHours(0,0,0,0);

if (+today == +startDate) {
  console.log('Today is the start date');
} else if (+today == +startPlus14) {
  console.log('Today is 14 days after the start date');
} else {
  console.log('Today is neither the start nor 14 days after the start');
}

您可以获得开始日期和当前日期之间的天数差异,然后检查该数字是否是 14 的倍数。

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return Math.floor((treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay);
}

var demarcationdate = new Date("2016-12-19"), 
    today = new Date(),
    days = daysBetween(demarcationdate,today),
    daystill = 14 - days%14,
    rec = days%14==0,
    d = new Date();

d.setDate(today.getDate() + daystill);
var nextDate = (d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear());

console.log("Days diff = "+days+". Recurs today = "+rec+". Next in "+daystill+" days ("+nextDate.toString()+").");

jsFiddle