EDT/ EST issues while incrementing date in Javascript [duplicate] - javascript

I need to increment a date value by one day in JavaScript.
For example, I have a date value 2010-09-11 and I need to store the date of the next day in a JavaScript variable.
How can I increment a date by a day?

Three options for you:
1. Using just JavaScript's Date object (no libraries):
My previous answer for #1 was wrong (it added 24 hours, failing to account for transitions to and from daylight saving time; Clever Human pointed out that it would fail with November 7, 2010 in the Eastern timezone). Instead, Jigar's answer is the correct way to do this without a library:
// To do it in local time
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
// To do it in UTC
var tomorrow = new Date();
tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);
This works even for the last day of a month (or year), because the JavaScript date object is smart about rollover:
// (local time)
var lastDayOf2015 = new Date(2015, 11, 31);
console.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
console.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
console.log("Resulting date: " + nextDay.toISOString());
2. Using MomentJS:
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Beware that add modifies the instance you call it on, rather than returning a new instance, so today.add(1, 'days') would modify today. That's why we start with a cloning op on var tomorrow = ....)
3. Using DateJS, but it hasn't been updated in a long time:
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();

var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);

The easiest way is to convert to milliseconds and add 1000*60*60*24 milliseconds e.g.:
var tomorrow = new Date(today.getTime()+1000*60*60*24);

Tomorrow in one line in pure JS but it's ugly !
new Date(new Date().setDate(new Date().getDate() + 1))
Here is the result :
Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)

None of the examples in this answer seem to work with Daylight Saving Time adjustment days. On those days, the number of hours in a day are not 24 (they are 23 or 25, depending on if you are "springing forward" or "falling back".)
The below AddDays javascript function accounts for daylight saving time:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Here are the tests I used to test the function:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());

You first need to parse your string before following the other people's suggestion:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
If you want it back in the same format again you will have to do that "manually":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
But I suggest getting Date.js as mentioned in other replies, that will help you alot.

I feel that nothing is safer than .getTime() and .setTime(), so this should be the best, and performant as well.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate() for invalid Date (like 31 + 1) is too dangerous, and it depends on the browser implementation.

Getting the next 5 days:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}

Two methods:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: Similar to the previous method
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)

Via native JS, to add one day you may do following:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Another option is to use moment library:
const date = moment().add(14, "days").toDate()

Get the string value of the date using the dateObj.toJSON() method Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON
Slice the date from the returned value and then increment by the number of days you want.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);

Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Example
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Result
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z

Not entirelly sure if it is a BUG(Tested Firefox 32.0.3 and Chrome 38.0.2125.101), but the following code will fail on Brazil (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Result:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Adding one Hour to the date, will make it work perfectly (but does not solve the problem).
$date = new Date(2014, 9, 16,0,1,1);
Result:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200

Results in a string representation of tomorrow's date. Use new Date() to get today's date, adding one day using Date.getDate() and Date.setDate(), and converting the Date object to a string.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();

Incrementing date's year with vanilla js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Just in case someone wants to increment other value than the date (day)

Timezone/daylight savings aware date increment for JavaScript dates:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}

This a simpler method ,
and it will return the date in simple yyyy-mm-dd format , Here it is
function incDay(date, n) {
var fudate = new Date(new Date(date).setDate(new Date(date).getDate() + n));
fudate = fudate.getFullYear() + '-' + (fudate.getMonth() + 1) + '-' + fudate.toDateString().substring(8, 10);
return fudate;
}
example :
var tomorrow = incDay(new Date(), 1); // the next day of today , aka tomorrow :) .
var spicaldate = incDay("2020-11-12", 1); // return "2020-11-13" .
var somedate = incDay("2020-10-28", 5); // return "2020-11-02" .
Note
incDay(new Date("2020-11-12"), 1);
incDay("2020-11-12", 1);
will return the same result .

Use this function, it´s solved my problem:
let nextDate = (daysAhead:number) => {
const today = new Date().toLocaleDateString().split('/')
const invalidDate = new Date(`${today[2]}/${today[1]}/${Number(today[0])+daysAhead}`)
if(Number(today[1]) === Number(12)){
return new Date(`${Number(today[2])+1}/${1}/${1}`)
}
if(String(invalidDate) === 'Invalid Date'){
return new Date(`${today[2]}/${Number(today[1])+1}/${1}`)
}
return new Date(`${today[2]}/${Number(today[1])}/${Number(today[0])+daysAhead}`)
}

Assigning the Increment of current date to other Variable
let startDate=new Date();
let endDate=new Date();
endDate.setDate(startDate.getDate() + 1)
console.log(startDate,endDate)

Related

How to compare two date and time in JavaScript?

I want to compare 2 dates and time, for this, I am getting data in timestamp and I convert timestamp in date but now how can I compare it?
exp time: 1580109819
expD: Mon Jan 27 2020 12:53:39 GMT+0530 (India Standard Time)
newDateTime: Mon Jan 27 2020 11:54:21 GMT+0530 (India Standard Time)
this.logData.exp = 1580109819;
console.log("exp time: ", this.logData.exp);
var expD = new Date(this.logData.exp * 1000);
console.log("expD: ", expD);
console.log(expD.getDate() + '-' + (expD.getMonth() + 1) + '-' + expD.getFullYear() + ' ' + expD.getTime());
var currentD = new Date(this.logData.exp * 1000);
let dateString = currentD.toUTCString();
console.log(dateString);
let newDateTime = new Date()
console.log("newDateTime: ", newDateTime);
You can save those date strings as Date objects.
So below code in the comparison to Two dates with Javascript.
var currentDate = new Date("2020-01-27");
var pastDate = new Date("2020-01-20");
if (pastDate < currentDate) {
currentDate = currentDate.setDate(currentDate.getDate() + 30);
}
$scope.pastDate = pastDate;
$scope.currentDate = currentDate;
using momentJs, for example:
var date = moment("2013-03-24")
var now = moment();
if (now > date) {
// date is past
} else {
// date is future
}
You can compare it as timestamps, without converting into Date object.
Assuming this.logData is already in timestamp (seconds), converting it into milli seconds for comparison.
New date is created using date object constructor and then converted into timestamp using method, getTime().
// For converting into milli seconds.
const expDateTimestamp = this.logData.exp * 1000;
// New date timestamp
const newDateTime = new Date();
const newDateTimeStamp = newDateTime.getTime();
// Comparison
if (expDateTimestamp < newDateTimeStamp) {
} else {
}
Use Date.prototype.getTime()
currentD.getTime() > newDateTime.getTime()

why not get correctly date, (plus 1 day) in javascript? [duplicate]

This question already has answers here:
How to add days to Date?
(56 answers)
Incrementing a date in JavaScript
(19 answers)
How can I add 1 day to current date?
(10 answers)
Closed 12 months ago.
I am trying to get JavaScript to display tomorrows date in format (dd-mm-yyyy)
I have got this script which displays todays date in format (dd-mm-yyyy)
var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")
Displays: 25/2/2012 (todays date of this post)
But how do I get it to display tomorrows date in the same format i.e. 26/2/2012
I tried this:
var day = currentDate.getDate() + 1
However I could keep +1 and go over 31 obviously there are not >32 days in a month
Been searching for hours but seems to be no answer or solution around this?
This should fix it up real nice for you.
If you pass the Date constructor a time it will do the rest of the work.
24 hours 60 minutes 60 seconds 1000 milliseconds
var currentDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")
One thing to keep in mind is that this method will return the date exactly 24 hours from now, which can be inaccurate around daylight savings time.
Phil's answer work's anytime:
var currentDate = new Date();
currentDate.setDate(currentDate.getDate() + 1);
The reason I edited my post is because I myself created a bug which came to light during DST using my old method.
The JavaScript Date class handles this for you
var d = new Date(2012, 1, 29) // month is 0-based in the Date constructor
console.log(d.toLocaleDateString())
// Wed Feb 29 2012
d.setDate(d.getDate() + 1)
console.log(d.toLocaleDateString())
// Thu Mar 01 2012
console.log(d.getDate())
// 1
Method Date.prototype.setDate() accepts even arguments outside the standard range and changes the date accordingly.
function getTomorrow() {
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1); // even 32 is acceptable
return `${tomorrow.getFullYear()}/${tomorrow.getMonth() + 1}/${tomorrow.getDate()}`;
}
Using JS only(Pure js)
Today
new Date()
//Tue Oct 06 2020 12:34:29 GMT+0530 (India Standard Time)
new Date(new Date().setHours(0, 0, 0, 0))
//Tue Oct 06 2020 00:00:00 GMT+0530 (India Standard Time)
new Date(new Date().setHours(0, 0, 0,0)).toLocaleDateString('fr-CA')
//"2020-10-06"
Tomorrow
new Date(+new Date() + 86400000);
//Wed Oct 07 2020 12:44:02 GMT+0530 (India Standard Time)
new Date(+new Date().setHours(0, 0, 0, 0) + 86400000);
//Wed Oct 07 2020 00:00:00 GMT+0530 (India Standard Time)
new Date(+new Date().setHours(0, 0, 0,0)+ 86400000).toLocaleDateString('fr-CA')
//"2020-10-07"
//don't forget the '+' before new Date()
Day after tomorrow
Just multiply by two ex:- 2*86400000
You can find all the locale shortcodes from https://stackoverflow.com/a/3191729/7877099
I would use the DateJS library. It can do exactly that.
http://www.datejs.com/
The do the following:
var d = new Date.today().addDays(1).toString("dd-mm-yyyy");
Date.today() - gives you today at midnight.
The below uses a combination of Roderick and Phil's answers with two extra conditionals that account for single digit months/days.
Many APIs I've worked with are picky about this, and require dates to have eight digits (eg '02022017'), instead of the 6 or 7 digits the date class is going to give you in some situations.
function nextDayDate() {
// get today's date then add one
var nextDay = new Date();
nextDay.setDate(nextDay.getDate() + 1);
var month = nextDay.getMonth() + 1;
var day = nextDay.getDate();
var year = nextDay.getFullYear();
if (month < 10) { month = "0" + month }
if (day < 10) { day = "0" + day }
return month + day + year;
}
Use cases :
Date.tomorrow() // 1 day next
Date.daysNext(1) // alternative Date.tomorrow()
Date.daysNext(2) // 2 days next.
IF "tomorrow " is not depend of today but of another Date different of Date.now(), Don't use static methods but rather you must use non-static :
i.e: Fri Dec 05 2008
var dec5_2008=new Date(Date.parse('2008/12/05'));
dec5_2008.tomorrow(); // 2008/12/06
dec5_2008.tomorrow().day // 6
dec5_2008.tomorrow().month // 12
dec5_2008.tomorrow().year //2008
dec5_2008.daysNext(1); // the same as previous
dec5_2008.daysNext(7) // next week :)
API :
Dateold=Date;function Date(e){var t=null;if(e){t=new Dateold(e)}else{t=new Dateold}t.day=t.getDate();t.month=t.getMonth()+1;t.year=t.getFullYear();return t}Date.prototype.daysNext=function(e){if(!e){e=0}return new Date(this.getTime()+24*60*60*1e3*e)};Date.prototype.daysAgo=function(e){if(!e){e=0}return Date.daysNext(-1*e)};Date.prototype.tomorrow=function(){return this.daysNext(1)};Date.prototype.yesterday=function(){return this.daysAgo(1)};Date.tomorrow=function(){return Date.daysNext(1)};Date.yesterday=function(){return Date.daysAgo(1)};Date.daysNext=function(e){if(!e){e=0}return new Date((new Date).getTime()+24*60*60*1e3*e)};Date.daysAgo=function(e){if(!e){e=0}return Date.daysNext(-1*e)}
Method 1: If you don't have problem in using other library, then this could work for you using moment.js
moment().add('days', 1).format('L');
Method 2: Using Date.js,
<script type="text/javascript" src="date.js"></script>
var tomorrow = new Date.today().addDays(1).toString("dd-mm-yyyy");
This method uses external library and not the native Date library.
As my bootstrap-datetimepicker was using moment.js and native date library, I preferred method 1. This question mentions these and some other methods.
Its really simple:
1: Create date object with today' date and time.
2: Use date object methods to retrieve day, month and full year and concatenate them using the + operator.
Sample Code:
var my_date = new Date();
var tomorrow_date = (my_date.getDate() + 1) + "-" + (my_date.getMonth() + 1) + "-" + my_date.getFullYear();
document.write(tomorrow_date);
function getMonday(d)
{
// var day = d.getDay();
var day = #Config.WeekStartOn
diff = d.getDate() - day + (day == 0 ? -6 : 0);
return new Date(d.setDate(diff));
}
The same as the original answer, but in one line:
var tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000)
The numbers stand for 24 hours 60 minutes 60 seconds 1000 milliseconds.
you can try this:
function Tomorrow(date=false) {
var givendate = (date!=false) ? new Date(date) : new Date();
givendate.setDate(givendate.getDate() + 1);
var day = givendate.getUTCDate()
var month = givendate.getUTCMonth()+1
var year = givendate.getUTCFullYear()
result ="<b>" + day + "/" + month + "/" + year + "</b>";
return result;
}
var day = Tomorrow('2020-06-30');
console.log('tomorrows1: '+Tomorrow('2020-06-30'));
console.log('tomorrows2: '+Tomorrow());
//to get date of tomorrow
let tomorrow=new Date(`${(new Date()).getFullYear()}-${(new Date()).getMonth()+1}-${(new Date()).getDate()+1}`);
//for dd-mm-yy format
tomorrow=`${tomorrow.getDate()}-${tomorrow.getMonth()+1}-${((tomorrow.getFullYear()).toString()).slice(-2)}`;
document.write(tomorrow)
//-----------Date Configuration march 18,2014----------------------
//alert(DateFilter);
var date = new Date();
y = date.getFullYear(), m = date.getMonth();
var EndDate = new Date();
switch (DateFilter) {
case 'today': var StartDate = EndDate; //todays date
break;
case 'yesterday':
var d = new Date();
var previousDate = new Date(d.getTime() - 1000 * 60 * 60 * 24);
var StartDate = new Date(previousDate.yyyymmdd()); //yesterday Date
break;
case 'tomorrow':
var d = new Date();
var NextDate = new Date(d.getTime() + 1000 * 60 * 60 * 24);
var StartDate = new Date(NextDate.yyyymmdd()); //tomorrow Date
break;
case 'thisweek': var StartDate = getMonday(new Date()); //1st date of this week
break;
case 'thismonth': var StartDate = new Date(y, m, 1); //1st date of this month
break;
case 'thisyear': var StartDate = new Date("01/01/" + date.getFullYear()); //1st date of this year
break;
case 'custom': //var StartDate = $("#txtFromDate").val();
break;
default:
var d = new Date();
var StartDate = new Date(d.getTime() - 30 * 24 * 60 * 60 * 1000); //one month ago date from now.
}
if (DateFilter != "custom") {
var SDate = $.datepicker.formatDate('#Config.DateFormat', StartDate); $("#txtFromDate").val(SDate);
var EDate = $.datepicker.formatDate('#Config.DateFormat', EndDate); $("#txtToDate").val(EDate);
}
//-----------Date Configuration march 18,2014----------------------
var curDate = new Date().toLocaleString().split(',')[0];
Simply! in dd.mm.yyyy format.
Date.prototype.NextDay = function (e) {
return new Date(this.getFullYear(), this.getMonth(), this.getDate() + ("string" == typeof e ? parseInt(e, 10) : e));
}
// tomorrow
console.log(new Date().NextDay(1))
// day after tomorrow
console.log(new Date().NextDay(2))

javascript adding 86400000ms to increment dates issue [duplicate]

I need to increment a date value by one day in JavaScript.
For example, I have a date value 2010-09-11 and I need to store the date of the next day in a JavaScript variable.
How can I increment a date by a day?
Three options for you:
1. Using just JavaScript's Date object (no libraries):
My previous answer for #1 was wrong (it added 24 hours, failing to account for transitions to and from daylight saving time; Clever Human pointed out that it would fail with November 7, 2010 in the Eastern timezone). Instead, Jigar's answer is the correct way to do this without a library:
// To do it in local time
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
// To do it in UTC
var tomorrow = new Date();
tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);
This works even for the last day of a month (or year), because the JavaScript date object is smart about rollover:
// (local time)
var lastDayOf2015 = new Date(2015, 11, 31);
console.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
console.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
console.log("Resulting date: " + nextDay.toISOString());
2. Using MomentJS:
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Beware that add modifies the instance you call it on, rather than returning a new instance, so today.add(1, 'days') would modify today. That's why we start with a cloning op on var tomorrow = ....)
3. Using DateJS, but it hasn't been updated in a long time:
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
The easiest way is to convert to milliseconds and add 1000*60*60*24 milliseconds e.g.:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
Tomorrow in one line in pure JS but it's ugly !
new Date(new Date().setDate(new Date().getDate() + 1))
Here is the result :
Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
None of the examples in this answer seem to work with Daylight Saving Time adjustment days. On those days, the number of hours in a day are not 24 (they are 23 or 25, depending on if you are "springing forward" or "falling back".)
The below AddDays javascript function accounts for daylight saving time:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Here are the tests I used to test the function:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
You first need to parse your string before following the other people's suggestion:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
If you want it back in the same format again you will have to do that "manually":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
But I suggest getting Date.js as mentioned in other replies, that will help you alot.
I feel that nothing is safer than .getTime() and .setTime(), so this should be the best, and performant as well.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate() for invalid Date (like 31 + 1) is too dangerous, and it depends on the browser implementation.
Getting the next 5 days:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Two methods:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: Similar to the previous method
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
Via native JS, to add one day you may do following:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Another option is to use moment library:
const date = moment().add(14, "days").toDate()
Get the string value of the date using the dateObj.toJSON() method Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON
Slice the date from the returned value and then increment by the number of days you want.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Example
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Result
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
Not entirelly sure if it is a BUG(Tested Firefox 32.0.3 and Chrome 38.0.2125.101), but the following code will fail on Brazil (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Result:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Adding one Hour to the date, will make it work perfectly (but does not solve the problem).
$date = new Date(2014, 9, 16,0,1,1);
Result:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
Results in a string representation of tomorrow's date. Use new Date() to get today's date, adding one day using Date.getDate() and Date.setDate(), and converting the Date object to a string.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Incrementing date's year with vanilla js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Just in case someone wants to increment other value than the date (day)
Timezone/daylight savings aware date increment for JavaScript dates:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}
This a simpler method ,
and it will return the date in simple yyyy-mm-dd format , Here it is
function incDay(date, n) {
var fudate = new Date(new Date(date).setDate(new Date(date).getDate() + n));
fudate = fudate.getFullYear() + '-' + (fudate.getMonth() + 1) + '-' + fudate.toDateString().substring(8, 10);
return fudate;
}
example :
var tomorrow = incDay(new Date(), 1); // the next day of today , aka tomorrow :) .
var spicaldate = incDay("2020-11-12", 1); // return "2020-11-13" .
var somedate = incDay("2020-10-28", 5); // return "2020-11-02" .
Note
incDay(new Date("2020-11-12"), 1);
incDay("2020-11-12", 1);
will return the same result .
Use this function, it´s solved my problem:
let nextDate = (daysAhead:number) => {
const today = new Date().toLocaleDateString().split('/')
const invalidDate = new Date(`${today[2]}/${today[1]}/${Number(today[0])+daysAhead}`)
if(Number(today[1]) === Number(12)){
return new Date(`${Number(today[2])+1}/${1}/${1}`)
}
if(String(invalidDate) === 'Invalid Date'){
return new Date(`${today[2]}/${Number(today[1])+1}/${1}`)
}
return new Date(`${today[2]}/${Number(today[1])}/${Number(today[0])+daysAhead}`)
}
Assigning the Increment of current date to other Variable
let startDate=new Date();
let endDate=new Date();
endDate.setDate(startDate.getDate() + 1)
console.log(startDate,endDate)

substract 5 minute from current Date and time javascript

I have problem while substracting time from current date. My Code looks like:
var d = new Date(),
year = d.getUTCFullYear(),
month = ('0'+(d.getUTCMonth()+1)).slice(-2),
day = ('0'+d.getUTCDate()).slice(-2),
hour = ('0'+d.getUTCHours()).slice(-2),
minute = ('0'+d.getUTCMinutes()).slice(-2),
second = ('0'+d.getUTCSeconds()).slice(-2);
var startDate = year+'/'+month+'/'+day+'-'+hour+':'+minute+':'+second;
console.log(startDate);
You can simply use like below
var fiveMinuteAgo = new Date( Date.now() - 1000 * (60 * 5) )
Get the milliseconds of the date variable, substract 5 minutes and create a new date object from it:
var d = new Date()
// d = Mon Feb 29 2016 08:00:09 GMT+0100 (W. Europe Standard Time)
var milliseconds = Date.parse(d)
// 1456729209000
milliseconds = milliseconds - (5 * 60 * 1000)
// - 5 minutes
d = new Date(milliseconds)
// d = Mon Feb 29 2016 07:55:04 GMT+0100 (W. Europe Standard Time)
If you are ready to use new date manipulation js called as moment js.
You can simply do it in one function as below:
moment().subtract(5, 'minutes');
Moment JS Docs
You could use like this
var original = new Date();
var subtract5min = new Date();
alert("before : " + original);
subtract5min.setTime(original.getTime() - 5*60*1000);
alert("after : " + subtract5min);
You can simply substract by
minute = ('0'+d.getUTCMinutes()).slice(-2)-5
var d = new Date(),
year = d.getUTCFullYear(),
month = ('0'+(d.getUTCMonth()+1)).slice(-2),
day = ('0'+d.getUTCDate()).slice(-2),
hour = ('0'+d.getUTCHours()).slice(-2),
minute = ('0'+d.getUTCMinutes()).slice(-2),
second = ('0'+d.getUTCSeconds()).slice(-2);
if (minute>=5)
minute = minute-5;
else {
minute = (parseInt(minute) + 60) - 5;
hour = hour - 1;
}
var startDate = year+'/'+month+'/'+day+'-'+hour+':'+minute+':'+second;
alert(startDate);

JavaScript how to get tomorrows date in format dd-mm-yy [duplicate]

This question already has answers here:
How to add days to Date?
(56 answers)
Incrementing a date in JavaScript
(19 answers)
How can I add 1 day to current date?
(10 answers)
Closed 12 months ago.
I am trying to get JavaScript to display tomorrows date in format (dd-mm-yyyy)
I have got this script which displays todays date in format (dd-mm-yyyy)
var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")
Displays: 25/2/2012 (todays date of this post)
But how do I get it to display tomorrows date in the same format i.e. 26/2/2012
I tried this:
var day = currentDate.getDate() + 1
However I could keep +1 and go over 31 obviously there are not >32 days in a month
Been searching for hours but seems to be no answer or solution around this?
This should fix it up real nice for you.
If you pass the Date constructor a time it will do the rest of the work.
24 hours 60 minutes 60 seconds 1000 milliseconds
var currentDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")
One thing to keep in mind is that this method will return the date exactly 24 hours from now, which can be inaccurate around daylight savings time.
Phil's answer work's anytime:
var currentDate = new Date();
currentDate.setDate(currentDate.getDate() + 1);
The reason I edited my post is because I myself created a bug which came to light during DST using my old method.
The JavaScript Date class handles this for you
var d = new Date(2012, 1, 29) // month is 0-based in the Date constructor
console.log(d.toLocaleDateString())
// Wed Feb 29 2012
d.setDate(d.getDate() + 1)
console.log(d.toLocaleDateString())
// Thu Mar 01 2012
console.log(d.getDate())
// 1
Method Date.prototype.setDate() accepts even arguments outside the standard range and changes the date accordingly.
function getTomorrow() {
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1); // even 32 is acceptable
return `${tomorrow.getFullYear()}/${tomorrow.getMonth() + 1}/${tomorrow.getDate()}`;
}
Using JS only(Pure js)
Today
new Date()
//Tue Oct 06 2020 12:34:29 GMT+0530 (India Standard Time)
new Date(new Date().setHours(0, 0, 0, 0))
//Tue Oct 06 2020 00:00:00 GMT+0530 (India Standard Time)
new Date(new Date().setHours(0, 0, 0,0)).toLocaleDateString('fr-CA')
//"2020-10-06"
Tomorrow
new Date(+new Date() + 86400000);
//Wed Oct 07 2020 12:44:02 GMT+0530 (India Standard Time)
new Date(+new Date().setHours(0, 0, 0, 0) + 86400000);
//Wed Oct 07 2020 00:00:00 GMT+0530 (India Standard Time)
new Date(+new Date().setHours(0, 0, 0,0)+ 86400000).toLocaleDateString('fr-CA')
//"2020-10-07"
//don't forget the '+' before new Date()
Day after tomorrow
Just multiply by two ex:- 2*86400000
You can find all the locale shortcodes from https://stackoverflow.com/a/3191729/7877099
I would use the DateJS library. It can do exactly that.
http://www.datejs.com/
The do the following:
var d = new Date.today().addDays(1).toString("dd-mm-yyyy");
Date.today() - gives you today at midnight.
The below uses a combination of Roderick and Phil's answers with two extra conditionals that account for single digit months/days.
Many APIs I've worked with are picky about this, and require dates to have eight digits (eg '02022017'), instead of the 6 or 7 digits the date class is going to give you in some situations.
function nextDayDate() {
// get today's date then add one
var nextDay = new Date();
nextDay.setDate(nextDay.getDate() + 1);
var month = nextDay.getMonth() + 1;
var day = nextDay.getDate();
var year = nextDay.getFullYear();
if (month < 10) { month = "0" + month }
if (day < 10) { day = "0" + day }
return month + day + year;
}
Use cases :
Date.tomorrow() // 1 day next
Date.daysNext(1) // alternative Date.tomorrow()
Date.daysNext(2) // 2 days next.
IF "tomorrow " is not depend of today but of another Date different of Date.now(), Don't use static methods but rather you must use non-static :
i.e: Fri Dec 05 2008
var dec5_2008=new Date(Date.parse('2008/12/05'));
dec5_2008.tomorrow(); // 2008/12/06
dec5_2008.tomorrow().day // 6
dec5_2008.tomorrow().month // 12
dec5_2008.tomorrow().year //2008
dec5_2008.daysNext(1); // the same as previous
dec5_2008.daysNext(7) // next week :)
API :
Dateold=Date;function Date(e){var t=null;if(e){t=new Dateold(e)}else{t=new Dateold}t.day=t.getDate();t.month=t.getMonth()+1;t.year=t.getFullYear();return t}Date.prototype.daysNext=function(e){if(!e){e=0}return new Date(this.getTime()+24*60*60*1e3*e)};Date.prototype.daysAgo=function(e){if(!e){e=0}return Date.daysNext(-1*e)};Date.prototype.tomorrow=function(){return this.daysNext(1)};Date.prototype.yesterday=function(){return this.daysAgo(1)};Date.tomorrow=function(){return Date.daysNext(1)};Date.yesterday=function(){return Date.daysAgo(1)};Date.daysNext=function(e){if(!e){e=0}return new Date((new Date).getTime()+24*60*60*1e3*e)};Date.daysAgo=function(e){if(!e){e=0}return Date.daysNext(-1*e)}
Method 1: If you don't have problem in using other library, then this could work for you using moment.js
moment().add('days', 1).format('L');
Method 2: Using Date.js,
<script type="text/javascript" src="date.js"></script>
var tomorrow = new Date.today().addDays(1).toString("dd-mm-yyyy");
This method uses external library and not the native Date library.
As my bootstrap-datetimepicker was using moment.js and native date library, I preferred method 1. This question mentions these and some other methods.
Its really simple:
1: Create date object with today' date and time.
2: Use date object methods to retrieve day, month and full year and concatenate them using the + operator.
Sample Code:
var my_date = new Date();
var tomorrow_date = (my_date.getDate() + 1) + "-" + (my_date.getMonth() + 1) + "-" + my_date.getFullYear();
document.write(tomorrow_date);
function getMonday(d)
{
// var day = d.getDay();
var day = #Config.WeekStartOn
diff = d.getDate() - day + (day == 0 ? -6 : 0);
return new Date(d.setDate(diff));
}
The same as the original answer, but in one line:
var tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000)
The numbers stand for 24 hours 60 minutes 60 seconds 1000 milliseconds.
you can try this:
function Tomorrow(date=false) {
var givendate = (date!=false) ? new Date(date) : new Date();
givendate.setDate(givendate.getDate() + 1);
var day = givendate.getUTCDate()
var month = givendate.getUTCMonth()+1
var year = givendate.getUTCFullYear()
result ="<b>" + day + "/" + month + "/" + year + "</b>";
return result;
}
var day = Tomorrow('2020-06-30');
console.log('tomorrows1: '+Tomorrow('2020-06-30'));
console.log('tomorrows2: '+Tomorrow());
//to get date of tomorrow
let tomorrow=new Date(`${(new Date()).getFullYear()}-${(new Date()).getMonth()+1}-${(new Date()).getDate()+1}`);
//for dd-mm-yy format
tomorrow=`${tomorrow.getDate()}-${tomorrow.getMonth()+1}-${((tomorrow.getFullYear()).toString()).slice(-2)}`;
document.write(tomorrow)
//-----------Date Configuration march 18,2014----------------------
//alert(DateFilter);
var date = new Date();
y = date.getFullYear(), m = date.getMonth();
var EndDate = new Date();
switch (DateFilter) {
case 'today': var StartDate = EndDate; //todays date
break;
case 'yesterday':
var d = new Date();
var previousDate = new Date(d.getTime() - 1000 * 60 * 60 * 24);
var StartDate = new Date(previousDate.yyyymmdd()); //yesterday Date
break;
case 'tomorrow':
var d = new Date();
var NextDate = new Date(d.getTime() + 1000 * 60 * 60 * 24);
var StartDate = new Date(NextDate.yyyymmdd()); //tomorrow Date
break;
case 'thisweek': var StartDate = getMonday(new Date()); //1st date of this week
break;
case 'thismonth': var StartDate = new Date(y, m, 1); //1st date of this month
break;
case 'thisyear': var StartDate = new Date("01/01/" + date.getFullYear()); //1st date of this year
break;
case 'custom': //var StartDate = $("#txtFromDate").val();
break;
default:
var d = new Date();
var StartDate = new Date(d.getTime() - 30 * 24 * 60 * 60 * 1000); //one month ago date from now.
}
if (DateFilter != "custom") {
var SDate = $.datepicker.formatDate('#Config.DateFormat', StartDate); $("#txtFromDate").val(SDate);
var EDate = $.datepicker.formatDate('#Config.DateFormat', EndDate); $("#txtToDate").val(EDate);
}
//-----------Date Configuration march 18,2014----------------------
var curDate = new Date().toLocaleString().split(',')[0];
Simply! in dd.mm.yyyy format.
Date.prototype.NextDay = function (e) {
return new Date(this.getFullYear(), this.getMonth(), this.getDate() + ("string" == typeof e ? parseInt(e, 10) : e));
}
// tomorrow
console.log(new Date().NextDay(1))
// day after tomorrow
console.log(new Date().NextDay(2))

Categories

Resources