JSFiddle - React, Tailwind, and code Playground
by Josh Pullen
JavaScript
function fuzzyDueString(date) {
const now = new Date()
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
function daysFromToday(n) {
const result = new Date(today)
result.setDate(result.getDate() + n)
return result
}
function sameDay(a, b) {
return (
a.getFullYear() === b.getFullYear() &&
a.getMonth() === b.getMonth() &&
a.getDate() === b.getDate()
)
}
const timeString = date.toLocaleTimeString("en-US", { timeStyle: "short" })
const defaultString = `${date.toLocaleDateString("en-US", {
weekday: "long",
year: (date.getFullYear() === today.getFullYear()) ? undefined : "long",
month: "short",
day: "numeric"
})} at ${timeString}`
if (sameDay(date, daysFromToday(-1))) {
return `yesterday at ${timeString}`
}
if (sameDay(date, today)) {
return `today at ${timeString}`
}
if (date < now) {
return defaultString
}
if (sameDay(date, daysFromToday(1))) {
return `tomorrow at ${timeString}`
}
const dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
if (date < daysFromToday(7)) {
return `${dayNames[date.getDay()]} at ${timeString}`
}
return defaultString
}
console.log(fuzzyDueString(new Date("10/31/2020 12:40")))