javascript - Hur delar man upp moment-datum i en array från tidslucka?
Jag har ett startDate och ett endDate och jag vill dela upp till en array av startDate och endDate? Min uppdelare är tidsluckor (inte ett nummer som i en paginering).
Min TypeScript-kod är:
startDate: Date;
endDate: Date;
timeSlots: moment.Duration = moment.duration(30, 'minutes');
Mitt startdatum är 2019-11-02T11:57:00.701Z och mitt slutdatum 2019-11-02T13:31:00.701Z
Jag letar efter hur man delar på och returnerar detta resultat:
[
{startDate: 2019-11-02T11:57:00.701Z, endDate: 2019-11-02T12:26:59.701Z}
{startDate: 2019-11-02T12:27:00.701Z, endDate: 2019-11-02T12:56:59.701Z}
{startDate: 2019-11-02T12:57:00.701Z, endDate: 2019-11-02T13:26:59.701Z}
{startDate: 2019-11-02T13:27:00.701Z, endDate: 2019-11-02T13:31:00.701Z}
]
Svar #1
Använder moment-range plugin
window['moment-range'].extendMoment(moment);
const start = moment('2019-11-02T11:57:00.701Z');
const end = moment('2019-11-02T13:31:00.701Z');
const range = moment.range(start, end);
const rangeBy = range.by('minutes', { step: 30 });
const res = Array.from(rangeBy).map(m => ({
'startTime': m.toISOString(),
'endTime': m.add(29, 'm').add(59, 's').toISOString()
}))
if(moment(res[res.length -1].endTime).isAfter(end)) {
res[res.length -1].endTime = end.toISOString();
}
console.log(res)<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.1/moment-range.js"></script>