108 lines
3.1 KiB
TypeScript
108 lines
3.1 KiB
TypeScript
import { dateToLocalizedString } from '@standardnotes/snjs/'
|
|
|
|
export const formatLastSyncDate = (lastUpdatedDate: Date) => {
|
|
return dateToLocalizedString(lastUpdatedDate)
|
|
}
|
|
|
|
export const formatDateForContextMenu = (date: Date | undefined) => {
|
|
if (!date) {
|
|
return
|
|
}
|
|
|
|
return `${date.toDateString()} ${date.toLocaleTimeString()}`
|
|
}
|
|
|
|
export const formatDateAndTimeForNote = (date: Date, includeTime = true) => {
|
|
const dateString = `${date.toLocaleDateString(undefined, {
|
|
weekday: 'long',
|
|
day: 'numeric',
|
|
month: 'short',
|
|
year: 'numeric',
|
|
})}`
|
|
|
|
if (includeTime) {
|
|
return `${dateString} at ${date.toLocaleTimeString(undefined, {
|
|
timeStyle: 'short',
|
|
})}`
|
|
} else {
|
|
return dateString
|
|
}
|
|
}
|
|
|
|
export const dateToStringStyle1 = (date: Date) => {
|
|
const dateString = `${date.toLocaleDateString()}`
|
|
|
|
return `${dateString} at ${date.toLocaleTimeString(undefined, {
|
|
timeStyle: 'short',
|
|
})}`
|
|
}
|
|
|
|
export const dateToHoursAndMinutesTimeString = (date: Date) => {
|
|
return date.toLocaleTimeString(undefined, {
|
|
timeStyle: 'short',
|
|
})
|
|
}
|
|
|
|
export function numHoursBetweenDates(date1: Date, date2: Date): number {
|
|
return Math.abs(date1.getTime() - date2.getTime()) / 3600000
|
|
}
|
|
|
|
export function areDatesInSameDay(date1: Date, date2: Date): boolean {
|
|
return date1.toLocaleDateString() === date2.toLocaleDateString()
|
|
}
|
|
|
|
export function numDaysBetweenDates(date1: Date, date2: Date): number {
|
|
if (numHoursBetweenDates(date1, date2) < 24) {
|
|
const dayOfWeekDiffers = date1.toLocaleDateString() !== date2.toLocaleDateString()
|
|
if (dayOfWeekDiffers) {
|
|
return 1
|
|
}
|
|
}
|
|
const diffInMs = date1.getTime() - date2.getTime()
|
|
const diffInDays = Math.abs(diffInMs / (1000 * 60 * 60 * 24))
|
|
return Math.floor(diffInDays)
|
|
}
|
|
|
|
/**
|
|
* @returns Date with day equal to first day of the offseted month
|
|
*/
|
|
export function addCalendarMonths(date: Date, months: number) {
|
|
const result = new Date(date)
|
|
const day = 1
|
|
result.setMonth(result.getMonth() + months, day)
|
|
return result
|
|
}
|
|
|
|
export function getWeekdayName(date: Date, format: 'long' | 'short'): string {
|
|
return date.toLocaleString('default', { weekday: format })
|
|
}
|
|
|
|
export function areDatesInSameMonth(date1: Date, date2: Date): boolean {
|
|
return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth()
|
|
}
|
|
|
|
export function numberOfMonthsBetweenDates(date1: Date, date2: Date, roundUpFractionalMonths = true) {
|
|
let startDate = date1
|
|
let endDate = date2
|
|
let inverse = false
|
|
|
|
if (date1 > date2) {
|
|
startDate = date2
|
|
endDate = date1
|
|
inverse = true
|
|
}
|
|
|
|
const yearsDifference = endDate.getFullYear() - startDate.getFullYear()
|
|
const monthsDifference = endDate.getMonth() - startDate.getMonth()
|
|
const daysDifference = endDate.getDate() - startDate.getDate()
|
|
|
|
let monthCorrection = 0
|
|
if (roundUpFractionalMonths === true && daysDifference > 0) {
|
|
monthCorrection = 1
|
|
} else if (roundUpFractionalMonths !== true && daysDifference < 0) {
|
|
monthCorrection = -1
|
|
}
|
|
|
|
return (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + monthCorrection)
|
|
}
|