Published
Edited
Apr 4, 2020
Insert cell
Insert cell
Insert cell
Insert cell
class Availability {

constructor (availability_object) {
if (availability_object)
this.availability = availability_object;
else
this.availability = { "Weekday" : [9, 20], "Weekend" : [10, 23] }
}

hourInRange (h, arr) { return h >= arr[0] && h < arr[1]; }
weekPart (d) { return ![0, 6].includes(d) ? "Weekday" : "Weekend"; }

nextAvailable (date) {

const date_day = date.getDay(),
date_hour = date.getHours();

let hour_array = this.availability[this.weekPart(date_day)],
next_day = date_hour >= hour_array[1];

if (!this.hourInRange(date_hour, hour_array)){

let alert_date = new Date(date)

if (next_day) {
alert_date.setDate(alert_date.getDate() + 1)
hour_array = this.availability[this.weekPart(alert_date.getDay())]
}

alert_date.setHours(hour_array[0])
alert_date.setMinutes(5)
alert_date.setSeconds(0)
alert_date.setMilliseconds(0)

return alert_date

}

return date
}

}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more