Comment transformer une période de date dans un tableau? Par exemple, j'ai une période allant du 1er mars 2020 au 29 avril 2020, comment puis-je le transformer en un tableau illustré ci-dessous?
period = [{day: "Sun", date: "1", month: "Mar", year: "2020"}, ...,
{day: "Wed",date: "29", month: "Apr", year: "2020"}]
4 Réponses :
Vous pouvez créer une matrice à partir de la plage de dates Suivez https://stackoverflow.com/a/50398144/4964569
et obtenir le jour de la journée, suivez https://stackoverflow.com/a/4822882/4964569 p>
Et utilisez la fonction de la carte code> pour générer votre P> var getDaysArray = function(s,e) {for(var a=[],d=new Date(s);d<=e;d.setDate(d.getDate()+1)){ a.push(new Date(d));}return a;};
var dateRange = getDaysArray(new Date('2020-03-10'), new Date('2020-04-29'));
var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
var result = dateRange.map(function(elem){
var obj = {
day: days[elem.getDay()],
date: elem.getDate(),
month: elem.getMonth(),
year: elem.getFullYear()
}
return obj;
});
console.log(result)
De manière traditionnelle, vous pouvez le faire comme ceci
var startDate = new Date('2020-03-10');
var endDateDate = new Date('2020-03-12');
var arr = [];
var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
while(startDate.getTime() !== endDateDate.getTime()) {
startDate.setDate(startDate.getDate() + 1)
arr.push({
day: days[startDate.getDay()],
date: startDate.getDate(),
month: startDate.getMonth(),
year: startDate.getYear()
})
}
console.log(arr);
var start = new Date('March 1, 2020');
var period = [];
for(var i=1; i<=60; i++){
if( i == 32 )
start = new Date('April 1, 2020');
if( i <= 31 )
start.setDate(i);
else
start.setDate(i - 31);
var dateString = start.toDateString().split(' ');
period.push({
day: dateString[0],
date: dateString[2],
month: dateString[1],
year: dateString[3]
});
}
console.log( JSON.stringify(period) );
Je suppose que vous avez deux dates comme délimiteurs de plage. Sinon, vous pouvez les créer de cette façon:
var startDate = new Date('1 March 2020')
var endDate = new Date('29 April 2020')
var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var period = []
while (startDate <= endDate) {
period.push({
day: days[startDate.getDay()],
date: startDate.getDate(),
month: months[startDate.getMonth()],
year: startDate.getFullYear()
})
startDate.setDate(startDate.getDate() + 1)
}
console.log(period)Ensuite, vous devez augmenter la première date d'un jour jusqu'à ce que vous atteigniez la dernière date. Pour augmenter la première date d'un jour, vous pouvez faire ceci:
var period = []
while (startDate <= lastDate) {
period.push({
day: days[startDate.getDay()],
date: startDate.getDate(),
month: months[startDate.getMonth()],
year: startDate.getYear()
})
startDate.setDate(startDate.getDate() + 1)
}
Vous pouvez obtenir le jour et le mois à partir d'une date avec date.getDay () code> et date.getMonth () , mais ces méthodes renverront des nombres. Pour obtenir les noms réels, vous pouvez faire ceci:
var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] var startDateDay = days[startDate.getDay()] var startDateMonth = months[startDate.getMonth()]
Et puis, vous itérez:
startDate.setDate(startDate.getDate() + 1)
Et c'est tout. Voici un violon avec un exemple fonctionnel:
var startDate = new Date('1 March 2020')
var endDate = new Date('29 April 2020')
Bienvenue dans Stack Overflow! Pouvez-vous montrer quel code vous avez essayé d'accomplir cela?