From 6d374e93d84aabcee7fdb7d966edc5d5d6400181 Mon Sep 17 00:00:00 2001 From: Daniel Freytag Date: Wed, 22 Jan 2025 10:58:41 +0100 Subject: [PATCH 1/2] feat: add `locale` to `getFullRelativeTime` --- dates/CHANGELOG.md | 4 ++++ dates/dates.test.ts | 24 ++++++++++++++++++++++++ dates/dates.ts | 16 +++++++++++----- dates/deno.jsonc | 2 +- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/dates/CHANGELOG.md b/dates/CHANGELOG.md index 02f342a..cb7030b 100644 --- a/dates/CHANGELOG.md +++ b/dates/CHANGELOG.md @@ -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 diff --git a/dates/dates.test.ts b/dates/dates.test.ts index 2c581db..b322c84 100644 --- a/dates/dates.test.ts +++ b/dates/dates.test.ts @@ -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')) +}) diff --git a/dates/dates.ts b/dates/dates.ts index 8afe05f..28bb8bd 100644 --- a/dates/dates.ts +++ b/dates/dates.ts @@ -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' @@ -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 @@ -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) @@ -191,6 +192,7 @@ 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 @@ -198,14 +200,16 @@ export const parseIso = parseISO * 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 @@ -213,9 +217,11 @@ export const getDateHourMinutes = (date: DateTime): string => * 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. diff --git a/dates/deno.jsonc b/dates/deno.jsonc index 1b301ce..edba894 100644 --- a/dates/deno.jsonc +++ b/dates/deno.jsonc @@ -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", From 6bb879e69fedcb70088c58e1c2ae6dcd24eac1a3 Mon Sep 17 00:00:00 2001 From: Daniel Freytag Date: Wed, 22 Jan 2025 11:04:04 +0100 Subject: [PATCH 2/2] ci: test on ubuntu arm as well --- .github/workflows/test.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8dd184c..993def9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,8 @@ jobs: fail-fast: false matrix: os: - - ubuntu-latest + - ubuntu-24.04 + - ubuntu-24.04-arm - windows-latest - macOS-latest steps: @@ -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 }} @@ -68,7 +69,8 @@ jobs: fail-fast: false matrix: os: - - ubuntu-latest + - ubuntu-24.04 + - ubuntu-24.04-arm - windows-latest - macOS-latest steps: @@ -107,7 +109,8 @@ jobs: - 22 - 23 os: - - ubuntu-latest + - ubuntu-24.04 + - ubuntu-24.04-arm - windows-latest - macOS-latest steps: