How to calculate and check for a bi-weekly date

眉间皱痕 提交于 2019-12-25 09:16:08

问题


I really need your help,

Let's say my demarcation start date is: December 19, 2016 as defined by the variable x

How can I write a JavaScript function, such that it will check the present date against x and the present date against what the recurrence date will be (14) days from x as defined by the variable y.

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

Ex.

function() {

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

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

}

回答1:


You could get the number of days difference between your start date and the current date then check if that number is a multiple of 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




回答2:


If Date.now() == 1482181410856, 14 days from now will be 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"



回答3:


Assuming you really want to compare precise dates, i.e. to the milliseconds, then:

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");
}

But most of the time we want to compare dates as full days, not milliseconds, so you'd have to compare ranges instead (from midnight to 11:59PM)... In that case, I recommend using a library to make your life easier - like moment.js for instance...

Hope this helps!




回答4:


This is probably a duplicate of Add +1 to current date.

If you have a start date, say 20 December, 2016, you can calculate 14 days after that by simply adding 14 days to the date. You can then check if today's date is either of those dates, e.g.

// 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');
}


来源:https://stackoverflow.com/questions/41230930/how-to-calculate-and-check-for-a-bi-weekly-date

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!