Public
Edited
Feb 2, 2023
Importers
Insert cell
Insert cell
function date_to_unit(dt, unit) {
let d = new Date(dt);
switch (unit) {
case "hour":
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
return d;
case "day":
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
return d;
case "week":
var day = d.getDate(),
month = d.getMonth(),
year = d.getFullYear(),
weekday = d.getDay() || 7;
return new Date(year, month, day - (weekday - 1));
case "month":
d.setDate(1);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
return d;
case "quarter":
d.setMonth(d.getMonth() - d.getMonth() % 3);
d.setDate(1);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
return d;
default:
throw "invalid unit";
}
}
Insert cell
function force_utc(dt_or_string) {
if (typeof dt_or_string == "string") {
return new Date(dt_or_string + "T00:00Z");
} else {
return new Date(dt_or_string.toISOString().split('T')[0] + "T00:00Z");
}
}
Insert cell
// usage: { y: percentile_reducer(0.9, "case_age") } to get the 90th percentile case age for a group
function percentile_reducer(percentile, keyname) {
return function(rows) {
let vals = rows.map(x => x[keyname]);
vals.sort(function(a, b) { return a-b });
let nth_percentile = vals[Math.floor(vals.length * percentile)];
return nth_percentile;
}
}
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