Data corrente convertita in 10 giorni prima e 10 giorni dopo
Ho questo codice in cui converto la data corrente in questo formato 2020-08-20
. Ma come posso modificarlo per darmi la data 10 giorni from
oggi e 10 giorni before
oggi.
ad esempio, oggi 2020-08-20
sto cercando di ottenere 10 giorni da oggi2020-08-30
Questo è il mio codice
const dateConverter = (dateIn) => {
var year = dateIn.getFullYear();
var month = dateIn.getMonth() + 1; // getMonth() is zero-based
var day = dateIn.getDate();
return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
var today = new Date();
console.log(dateConverter(today));
Risposte
È un po 'complicato. Impostare prima le ore dalla data a 12 per evitare problemi con il cambio orario estivo / invernale. Quindi usa getDate
add 10 per i giorni extra e setDate
con il nuovo valore. Ora hai un valore in millisecondi, genera da questo una nuova data per ottenere un oggetto data. Per la seconda data sottrarre 20 giorni perché la data originale è stata modificata dall'azione precedente e fare tutte le altre allo stesso modo.
Formatta l'output per le date con getFullYear
, getMonth
e getDate
. Poiché il mese è gestito in JS da 0 a 11, aggiungi 1 mese. Mesi e giorni potrebbero essere 1 cifra ma vuoi 2 cifre, quindi aggiungi prima della stringa "0"
e ottieni gli ultimi 2 caratteri con slice
.
Esegui il formato per entrambe le date e restituiscile come array.
const dateConverter = (dateIn) => {
dateIn.setHours(12);
let dateIn10days = new Date(dateIn.setDate(dateIn.getDate() + 10));
let dateFor10days = new Date(dateIn.setDate(dateIn.getDate() - 20));
let strIn10Days = dateIn10days.getFullYear() + '-' + ('0' +(dateIn10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateIn10days.getDate()).slice(-2);
let strFor10Days = dateFor10days.getFullYear() + '-' + ('0' +(dateFor10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateFor10days.getDate()).slice(-2);
return [strFor10Days, strIn10Days];
}
let today = new Date();
console.log(dateConverter(today));
Questo codice ti aiuterà
Riferimento JavaScript per il calcolo della data dalla data odierna a 7 giorni prima
per dopo 10 giorni basta convertire il - in +
const dateConverter = (dateIn) => {
var dates ={};
var days = 10; // Days you want to subtract
for(let i=0;i<days;i++){
var date = dateIn;
var last = new Date(date.getTime() - (i * 24 * 60 * 60 * 1000));
var day = last.getDate();
var month= last.getMonth()+1;
var year= last.getFullYear();
dates[i] = year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
return dates
}
var today = new Date();
console.log(dateConverter(today));
Prova questo
const dateConverter = (dateIn) => {
var year = dateIn.getFullYear();
var month = dateIn.getMonth() + 1; // getMonth() is zero-based
var day = dateIn.getDate();
return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
var today = new Date();
var numberOfDaysToAdd = 10;
var tenDaysPlus = today.setDate(today.getDate() + numberOfDaysToAdd);
console.log(dateConverter(today));
var today = new Date();
var numberOfDaysToSubtract = 10;
var tenDaysMinus = today.setDate(today.getDate() - numberOfDaysToSubtract);
console.log(dateConverter(today));
Ti suggerirei di utilizzare la libreria Moment ma desideri comunque un semplice javascript
const convert = (date) => {
const pastDate = new Date(date)
pastDate.setDate(pastDate.getDate() - 10);
const futureDate = new Date(date)
futureDate.setDate(futureDate.getDate() + 10);
return { pastDate, futureDate }
}
chiama la funzione di conversione con qualsiasi data.
Anch'io ci ho già pensato in passato. Ma su questo Stack Overflow puoi trovare un'ottima risposta: aggiungi giorni alla data JavaScript
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
Questo è il codice tratto da quel post.
Per sottrarre giorni, sostituisci semplicemente "+ giorni" con "- giorni"
Spero che questo abbia risolto il tuo problema!
Puoi convertire tutte le date in timestamp
e poi semplicemente calcolare con esse:
const dateTimestamp = new Date("2020-10-10").getTime()
const milisecondsInADay = 60*60*24*1000
const milisecondsInTenDays = milisecondsInADay * 10
const beforeDate = new Date(dateTimestamp - milisecondsInTenDays)
const afterDate = new Date(dateTimestamp + milisecondsInTenDays)
console.log("before", beforeDate)
console.log("after", afterDate)
console.log("initially", new Date(dateTimestamp))