Published
Edited
Apr 30, 2019
Insert cell
md`# Time`
Insert cell
md`## Calendar days`
Insert cell
month = d3.timeMonth.floor(time)
Insert cell
mondayOfMonth = d3.timeMonday(month)
Insert cell
nextMonth = d3.timeSecond.offset(d3.timeMonth.offset(month, 1), -1)
Insert cell
mondayOnOrAfterNextMonth = d3.timeSecond.offset(d3.timeMonday.ceil(nextMonth), -1)
Insert cell
rawCalendarDays = d3.timeDays(mondayOfMonth, mondayOnOrAfterNextMonth)
Insert cell
calendarDays = rawCalendarDays.map(day => {
const today = +d3.timeDay(now) === +day;
const inMonth = +d3.timeMonth(day) === +month;
return {
date: day,
today,
inMonth
};
})
Insert cell
md`### Days by Week`
Insert cell
Insert cell
monthDaysUngrouped = monthDaysGroupedByWeek.reduce((acc, curr) => acc.concat(curr), [])
Insert cell
table(monthDaysUngrouped, {
style: "compact",
paged: monthDaysUngrouped.length,
columns: {
date: {
formatter(val) {
return formatDay(val);
}
}
}
})
Insert cell
formatDay = d3.timeFormat("%A %B %d")
Insert cell
md`## Hours, minutes, seconds`
Insert cell
now = new Date()
Insert cell
time = d3.timeMonth.offset(now, 1)
Insert cell
day = [d3.timeDay.floor(time), new Date()]
Insert cell
new Set(d3.timeHours(day[0], day[1]).map(formatHour))
Insert cell
new Set(d3.timeMinutes(day[0], day[1]).map(formatMinute))
Insert cell
new Set(d3.timeSeconds(day[0], day[1]).map(formatSecond))
Insert cell
formatHour = d3.timeFormat("%H")
Insert cell
formatMinute = d3.timeFormat("%M")
Insert cell
formatSecond = d3.timeFormat("%S")
Insert cell
d3.timeHours(new Date())
Insert cell
md`## Timespan formatting`
Insert cell
span = 3000000
Insert cell
seconds = Math.floor(span - (hours * 60 * 60) - (minutes * 60))
Insert cell
minutes = Math.floor((span - (hours * 60 * 60)) / 60)
Insert cell
hours = Math.floor(span / 60 / 60)
Insert cell
result = `${f(hours)}:${f(minutes)}:${f(seconds)}`
Insert cell
f = d3.format("02d")
Insert cell
md`## Imports`
Insert cell
d3 = require("d3@5")
Insert cell
d3_array = require("d3-array@2")
Insert cell
import {table} from "@tmcw/tables@513"
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