Skip to content

Commit

Permalink
Merge pull request #24 from frytg/dev/date-locale
Browse files Browse the repository at this point in the history
feat: add `locale` to `getFullRelativeTime`
  • Loading branch information
frytg authored Jan 22, 2025
2 parents 90ed131 + 6bb879e commit 24f7214
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 10 deletions.
11 changes: 7 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ jobs:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04
- ubuntu-24.04-arm
- windows-latest
- macOS-latest
steps:
Expand Down Expand Up @@ -59,7 +60,7 @@ jobs:

- name: Publish dry run
run: deno publish --dry-run
if: matrix.os == 'ubuntu-latest'
if: matrix.os == 'ubuntu-24.04'

test-on-bun:
runs-on: ${{ matrix.os }}
Expand All @@ -68,7 +69,8 @@ jobs:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04
- ubuntu-24.04-arm
- windows-latest
- macOS-latest
steps:
Expand Down Expand Up @@ -107,7 +109,8 @@ jobs:
- 22
- 23
os:
- ubuntu-latest
- ubuntu-24.04
- ubuntu-24.04-arm
- windows-latest
- macOS-latest
steps:
Expand Down
4 changes: 4 additions & 0 deletions dates/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Dates Changelog

## 2025-01-22 - 0.2.0

- feat: add `getFullRelativeTime` to get a full relative time string

## 2024-12-22 - 0.1.1

- fix: added `@deno-types` to `DateTime` import
Expand Down
24 changes: 24 additions & 0 deletions dates/dates.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,27 @@ test('getFullRelativeTime() combines date and relative time', () => {
assert(fullRelative.includes('2024'))
assert(fullRelative.includes('ago'))
})

test('getFullRelativeTime() uses locale (NL)', () => {
const date = DateTime.fromISO('2024-03-01T12:00:00Z')
const fullRelative = getFullRelativeTime(date, 'nl')
assert(fullRelative.includes('maart'))
assert(fullRelative.includes('2024'))
assert(fullRelative.includes('geleden'))
})

test('getFullRelativeTime() uses locale (FR)', () => {
const date = DateTime.fromISO('2024-03-01T12:00:00Z')
const fullRelative = getFullRelativeTime(date, 'fr')
assert(fullRelative.includes('mars'))
assert(fullRelative.includes('2024'))
assert(fullRelative.includes('il y a'))
})

test('getFullRelativeTime() uses locale (DE)', () => {
const date = DateTime.fromISO('2024-03-01T12:00:00Z')
const fullRelative = getFullRelativeTime(date, 'de')
assert(fullRelative.includes('März'))
assert(fullRelative.includes('2024'))
assert(fullRelative.includes('vor'))
})
16 changes: 11 additions & 5 deletions dates/dates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { format as stdFormat } from '@std/fmt/duration'
// @deno-types="npm:@types/luxon@^3.4.2"
import { DateTime } from 'luxon'

const DEFAULT_LOCALE = 'en'
const LOCAL_TIMEZONE = 'Europe/Amsterdam'
const DATE_HOUR_MINUTES_FORMAT = 'ccc, d. LLLL yyyy - h:mma'

Expand Down Expand Up @@ -136,7 +137,7 @@ export const getMsOffset = (ms: number): number => getMs() - ms
/**
* Get relative time
* @param {DateTime} date - date object
* @param {string} [locale] - locale (default: 'en-US')
* @param {string} [locale] - locale (default: en)
* @returns {string} relative time
*
* @example
Expand All @@ -147,7 +148,7 @@ export const getMsOffset = (ms: number): number => getMs() - ms
* getRelative(getNow(), 'nl-NL')
* ```
*/
export const getRelative = (date: DateTime, locale = 'en-US'): string | null => date.toRelative({ locale })
export const getRelative = (date: DateTime, locale = DEFAULT_LOCALE): string | null => date.toRelative({ locale })

/**
* Get year-month-day (YYYYMMDD or YYYY-MM-DD)
Expand Down Expand Up @@ -191,31 +192,36 @@ export const parseIso = parseISO
/**
* Format the date in a human readable way (like 'Mon, 23. Nov 2024 - 10:00AM')
* @param {DateTime} date - date object
* @param {string} [locale] - locale (default: en)
* @returns {string} readable date
*
* @example
* ```ts
* import { getDateHourMinutes } from '@frytg/dates'
*
* getDateHourMinutes(getNow())
* getDateHourMinutes(getNow(), 'nl')
* ```
*/
export const getDateHourMinutes = (date: DateTime): string =>
`${date.setLocale('en').toFormat(DATE_HOUR_MINUTES_FORMAT)}`
export const getDateHourMinutes = (date: DateTime, locale = DEFAULT_LOCALE): string =>
`${date.setLocale(locale).toFormat(DATE_HOUR_MINUTES_FORMAT)}`

/**
* Get full relative time (combines {@link getDateHourMinutes} and {@link getRelative})
* @param {DateTime} date - date object
* @param {string} [locale] - locale (default: en)
* @returns {string} full relative time
*
* @example
* ```ts
* import { getFullRelativeTime } from '@frytg/dates'
*
* getFullRelativeTime(getNow())
* getFullRelativeTime(getNow(), 'nl')
* ```
*/
export const getFullRelativeTime = (date: DateTime): string => `${getDateHourMinutes(date)} (${getRelative(date)})`
export const getFullRelativeTime = (date: DateTime, locale = DEFAULT_LOCALE): string =>
`${getDateHourMinutes(date, locale)} (${getRelative(date, locale)})`

/**
* Format a duration in milliseconds to a human readable string.
Expand Down
2 changes: 1 addition & 1 deletion dates/deno.jsonc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://jsr.io/schema/config-file.v1.json",
"name": "@frytg/dates",
"version": "0.1.1",
"version": "0.2.0",
"exports": "./dates.ts",
"imports": {
"@std/fmt": "jsr:@std/fmt@^1.0.3",
Expand Down

0 comments on commit 24f7214

Please sign in to comment.