Remove old ago
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
import {RichText} from '@atproto/api'
|
import {RichText} from '@atproto/api'
|
||||||
import {I18n} from '@lingui/core'
|
|
||||||
|
|
||||||
import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player'
|
import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player'
|
||||||
import {
|
import {
|
||||||
@@ -147,80 +146,6 @@ describe('makeRecordUri', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('ago', () => {
|
|
||||||
const oneYearDate = new Date(
|
|
||||||
new Date().setMonth(new Date().getMonth() - 11),
|
|
||||||
).setDate(new Date().getDate() - 28)
|
|
||||||
|
|
||||||
const inputs = [
|
|
||||||
1671461038,
|
|
||||||
'04 Dec 1995 00:12:00 GMT',
|
|
||||||
new Date(),
|
|
||||||
new Date().setSeconds(new Date().getSeconds() - 10),
|
|
||||||
new Date().setMinutes(new Date().getMinutes() - 10),
|
|
||||||
new Date().setHours(new Date().getHours() - 1),
|
|
||||||
new Date().setDate(new Date().getDate() - 1),
|
|
||||||
new Date().setDate(new Date().getDate() - 20),
|
|
||||||
new Date().setDate(new Date().getDate() - 25),
|
|
||||||
new Date().setDate(new Date().getDate() - 28),
|
|
||||||
new Date().setDate(new Date().getDate() - 29),
|
|
||||||
new Date().setDate(new Date().getDate() - 30),
|
|
||||||
new Date().setMonth(new Date().getMonth() - 1),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 1)).setDate(
|
|
||||||
new Date().getDate() - 20,
|
|
||||||
),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 1)).setDate(
|
|
||||||
new Date().getDate() - 25,
|
|
||||||
),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 1)).setDate(
|
|
||||||
new Date().getDate() - 28,
|
|
||||||
),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 1)).setDate(
|
|
||||||
new Date().getDate() - 29,
|
|
||||||
),
|
|
||||||
new Date().setMonth(new Date().getMonth() - 11),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 11)).setDate(
|
|
||||||
new Date().getDate() - 20,
|
|
||||||
),
|
|
||||||
new Date(new Date().setMonth(new Date().getMonth() - 11)).setDate(
|
|
||||||
new Date().getDate() - 25,
|
|
||||||
),
|
|
||||||
oneYearDate,
|
|
||||||
]
|
|
||||||
const outputs = [
|
|
||||||
new Date(1671461038).toLocaleDateString(),
|
|
||||||
new Date('04 Dec 1995 00:12:00 GMT').toLocaleDateString(),
|
|
||||||
'now',
|
|
||||||
'10s',
|
|
||||||
'10m',
|
|
||||||
'1h',
|
|
||||||
'1d',
|
|
||||||
'20d',
|
|
||||||
'25d',
|
|
||||||
'28d',
|
|
||||||
'29d',
|
|
||||||
'1mo',
|
|
||||||
'1mo',
|
|
||||||
'1mo',
|
|
||||||
'1mo',
|
|
||||||
'2mo',
|
|
||||||
'2mo',
|
|
||||||
'11mo',
|
|
||||||
'11mo',
|
|
||||||
'11mo',
|
|
||||||
new Date(oneYearDate).toLocaleDateString(),
|
|
||||||
]
|
|
||||||
|
|
||||||
it('correctly calculates how much time passed, in a string', () => {
|
|
||||||
const i18n = new I18n({locale: 'en'})
|
|
||||||
|
|
||||||
for (let i = 0; i < inputs.length; i++) {
|
|
||||||
const result = ago(i18n, inputs[i])
|
|
||||||
expect(result).toEqual(outputs[i])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('makeValidHandle', () => {
|
describe('makeValidHandle', () => {
|
||||||
const inputs = [
|
const inputs = [
|
||||||
'test-handle-123',
|
'test-handle-123',
|
||||||
|
|||||||
@@ -1,92 +1,4 @@
|
|||||||
import {I18n} from '@lingui/core'
|
import {I18n} from '@lingui/core'
|
||||||
import {defineMessage, msg} from '@lingui/macro'
|
|
||||||
|
|
||||||
const NOW = 5
|
|
||||||
const MINUTE = 60
|
|
||||||
const HOUR = MINUTE * 60
|
|
||||||
const DAY = HOUR * 24
|
|
||||||
const MONTH_30 = DAY * 30
|
|
||||||
const MONTH = DAY * 30.41675 // This results in 365.001 days in a year, which is close enough for nearly all cases
|
|
||||||
export function ago(i18n: I18n, date: number | string | Date): string {
|
|
||||||
let ts: number
|
|
||||||
if (typeof date === 'string') {
|
|
||||||
ts = Number(new Date(date))
|
|
||||||
} else if (date instanceof Date) {
|
|
||||||
ts = Number(date)
|
|
||||||
} else {
|
|
||||||
ts = date
|
|
||||||
}
|
|
||||||
|
|
||||||
const diffSeconds = Math.floor((Date.now() - ts) / 1e3)
|
|
||||||
|
|
||||||
// We can't use `i18n.number` with a `unit` format here because ICU (which
|
|
||||||
// provides localization data) doesn't seem to have narrow unit display
|
|
||||||
// formatting for locales like Japanese, Spanish, French and Turkish.
|
|
||||||
|
|
||||||
// We'll use `defineMessage` here instead of our usual `msg` as we can pass
|
|
||||||
// an object with a `comment` property that better describes what these
|
|
||||||
// strings are supposed to be. These comments get stripped out in production.
|
|
||||||
|
|
||||||
// Intermediate variables are created to improve the interpolation keys.
|
|
||||||
|
|
||||||
if (diffSeconds < NOW) {
|
|
||||||
return i18n._(msg`now`)
|
|
||||||
} else if (diffSeconds < MINUTE) {
|
|
||||||
const seconds = diffSeconds
|
|
||||||
|
|
||||||
return i18n._(
|
|
||||||
defineMessage({
|
|
||||||
message: `${seconds}s`,
|
|
||||||
comment: `How many seconds has passed, displayed in a narrow form`,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
} else if (diffSeconds < HOUR) {
|
|
||||||
const minutes = Math.floor(diffSeconds / MINUTE)
|
|
||||||
|
|
||||||
return i18n._(
|
|
||||||
defineMessage({
|
|
||||||
message: `${minutes}m`,
|
|
||||||
comment: `How many minutes has passed, displayed in a narrow form`,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
} else if (diffSeconds < DAY) {
|
|
||||||
const hours = Math.floor(diffSeconds / HOUR)
|
|
||||||
|
|
||||||
return i18n._(
|
|
||||||
defineMessage({
|
|
||||||
message: `${hours}h`,
|
|
||||||
comment: `How many hours has passed, displayed in a narrow form`,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
} else if (diffSeconds < MONTH_30) {
|
|
||||||
const days = Math.round(diffSeconds / DAY)
|
|
||||||
|
|
||||||
return i18n._(
|
|
||||||
defineMessage({
|
|
||||||
message: `${days}d`,
|
|
||||||
comment: `How many days has passed, displayed in a narrow form`,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
let months = diffSeconds / MONTH
|
|
||||||
if (months % 1 >= 0.9) {
|
|
||||||
months = Math.ceil(months)
|
|
||||||
} else {
|
|
||||||
months = Math.floor(months)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (months < 12) {
|
|
||||||
return i18n._(
|
|
||||||
defineMessage({
|
|
||||||
message: `${months}mo`,
|
|
||||||
comment: `How many months has passed, displayed in a narrow form`,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
return i18n.date(new Date(ts))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function niceDate(i18n: I18n, date: number | string | Date) {
|
export function niceDate(i18n: I18n, date: number | string | Date) {
|
||||||
const d = new Date(date)
|
const d = new Date(date)
|
||||||
|
|||||||
Reference in New Issue
Block a user