I'm trying to turn a date which I'm getting into date 1 day and then format it in a specific way. The first part works, but when I want to format that new date, I'm actually getting a different date than what I have initially after the increase.
var customDate = '/Date(1643587200000)/'
var number = customDate.replace(/\D/g,'');
var plusDay = new Date(parseInt(number));
console.log(plusDay) // this is the date before the increase
plusDay.setDate(plusDay.getDate() 1);
console.log(plusDay); // this is the date I want
//this is the part where things start going wrong
var d = plusDay.getDay();
console.log(d);
var m = plusDay.getMonth();
console.log(m);
var y = plusDay.getFullYear();
console.log(y);
let fDate = new Date(y, m, d);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(fDate);
let mo = new Intl.DateTimeFormat('en', { month: 'long' }).format(fDate);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(fDate);
console.log (mo ' ' da ', ' ye);
What am I doing wrong here and how do I fix it? Why is it that if I have 31. January 2022 (/Date(1643587200000)/) as customDate, the result is 2. February 2022 ( 1 day), but when it's 31. July 2021 (/Date(1627689600000)/), the resulting date is 31. July 2021 (-1 day)?
CodePudding user response:
getDay
returns the day of the week, not the day of the month. Replace it by getDate
.
P.S. Also your code is not considering the timezone offset that might be relevant depending on where the JavaScript is executed.
var customDate = '/Date(1643587200000)/'
var number = customDate.replace(/\D/g,'');
var plusDay = new Date(parseInt(number));
console.log(plusDay) // this is the date before the increase
plusDay.setDate(plusDay.getDate() 1);
console.log(plusDay); // this is the date I want
//this is the part where things start going wrong
var d = plusDay.getDate(); // modified
console.log(d);
var m = plusDay.getMonth();
console.log(m);
var y = plusDay.getFullYear();
console.log(y);
let fDate = new Date(y, m, d);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(fDate);
let mo = new Intl.DateTimeFormat('en', { month: 'long' }).format(fDate);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(fDate);
console.log (mo ' ' da ', ' ye);
CodePudding user response:
Something is wrong with your formatting of the data. I set plusDay directly (no reformatting) and it works. Please note that getMonth() returns relative zero.
var plusDay = new Date("January 31, 2022");
console.log(plusDay) // this is the date before the increase
plusDay.setDate(plusDay.getDate() 1);
console.log(plusDay); // this is the date I want
//this is the part where things start going wrong
var d = plusDay.getDay();
console.log(d);
var m = plusDay.getMonth();
console.log(m);
var y = plusDay.getFullYear();
console.log(y);
let fDate = new Date(y, m, d);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric'
}).format(fDate);
let mo = new Intl.DateTimeFormat('en', { month: 'long' }).format(fDate);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(fDate);
console.log (mo ' ' da ', ' ye);
CodePudding user response:
Read: Javascript's Date Object
Date.prototype.getMonth() Returns the month (0–11) in the specified date according to local time.
As you can see, it returns month from 0-11.
It was built like that since its inception for reasons idk.
Why did we not change it? Because it will be a breaking change and affect numerous older projects.