- {new Date(event.start * 1000).toLocaleDateString(undefined, { month: 'short' })}
+ {new Date(event.start * 1000).toLocaleDateString(dateLocaleCode(), { month: 'short' })}
{new Date(event.start * 1000).getDate()}
diff --git a/src/components/MarketplaceItemCard.tsx b/src/components/MarketplaceItemCard.tsx
index e7ca5dd..6befd38 100644
--- a/src/components/MarketplaceItemCard.tsx
+++ b/src/components/MarketplaceItemCard.tsx
@@ -28,7 +28,7 @@ import { getLastLocation } from '@/lib/lastLocation';
import { itemDistanceKm } from '@/lib/sortOptions';
import { TrustBadge } from '@/components/TrustBadge';
import { Clock, Search, Tag, Flag, MoreVertical, ShieldCheck, Calendar, Package, AlertTriangle, CheckCircle, RotateCcw, Trash2, Loader2 } from 'lucide-react';
-import { formatDistanceToNow } from 'date-fns';
+import { formatDistanceToNow } from '@/lib/dateFnsI18n';
import type { MarketplaceItem } from '@/lib/types';
import { GEAR_CONDITIONS, GEAR_CATEGORIES, PRICE_TYPES, LISTING_REPORT_REASONS, formatPrice } from '@/lib/types';
import { useTranslation } from '@/contexts/language';
diff --git a/src/components/MyDataTab.tsx b/src/components/MyDataTab.tsx
index e3f8b3d..77fa2bc 100644
--- a/src/components/MyDataTab.tsx
+++ b/src/components/MyDataTab.tsx
@@ -39,7 +39,7 @@ import {
Heart,
Zap,
} from 'lucide-react';
-import { formatDistanceToNow } from 'date-fns';
+import { formatDistanceToNow } from '@/lib/dateFnsI18n';
import { useTranslation } from '@/contexts/language';
// Kind constants
diff --git a/src/components/NewsletterIssueView.tsx b/src/components/NewsletterIssueView.tsx
index 6b2dcb6..e26426f 100644
--- a/src/components/NewsletterIssueView.tsx
+++ b/src/components/NewsletterIssueView.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useMemo } from 'react';
import { ImageWithFallback } from '@/components/ImageWithFallback';
import { Link } from 'react-router-dom';
@@ -152,7 +153,7 @@ export function NewsletterIssueView({ pubkey, identifier }: { pubkey: string; id
const authorName = author.data?.metadata?.name ?? genUserName(pubkey);
const authorPic = author.data?.metadata?.picture;
- const date = new Date(issue.publishedAt * 1000).toLocaleDateString('en-US', {
+ const date = new Date(issue.publishedAt * 1000).toLocaleDateString(dateLocaleCode(), {
year: 'numeric',
month: 'long',
day: 'numeric',
diff --git a/src/components/NotificationBell.tsx b/src/components/NotificationBell.tsx
index 93e9ae3..b31c9cd 100644
--- a/src/components/NotificationBell.tsx
+++ b/src/components/NotificationBell.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useEffect, useMemo, useState } from 'react';
import { Link } from 'react-router-dom';
import { nip19 } from 'nostr-tools';
@@ -148,7 +149,7 @@ function NewsletterItem({
pubkey: issue.pubkey,
identifier: issue.identifier,
});
- const date = new Date(issue.publishedAt * 1000).toLocaleDateString(undefined, {
+ const date = new Date(issue.publishedAt * 1000).toLocaleDateString(dateLocaleCode(), {
month: 'short',
day: 'numeric',
});
diff --git a/src/components/RouteDialog.tsx b/src/components/RouteDialog.tsx
index b19af07..a598e2d 100644
--- a/src/components/RouteDialog.tsx
+++ b/src/components/RouteDialog.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
import L from 'leaflet';
import { Loader2, MapPin, Navigation, AlertTriangle, LocateFixed, Play, Square, Crosshair, Volume2, VolumeX, Check, Search } from 'lucide-react';
@@ -117,7 +118,7 @@ function speedValue(distanceM: number, durationS: number): string | undefined {
/** Local clock time you'd arrive if you set off now. */
function etaClock(durationS: number): string {
- return new Date(Date.now() + durationS * 1000).toLocaleTimeString([], {
+ return new Date(Date.now() + durationS * 1000).toLocaleTimeString(dateLocaleCode(), {
hour: '2-digit',
minute: '2-digit',
});
diff --git a/src/components/SasquatchGuide.tsx b/src/components/SasquatchGuide.tsx
index 5f642ce..f1c0214 100644
--- a/src/components/SasquatchGuide.tsx
+++ b/src/components/SasquatchGuide.tsx
@@ -7,6 +7,7 @@
* Falls back to static FAQ if AI is unavailable.
*/
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
import { Input } from '@/components/ui/input';
@@ -1656,7 +1657,7 @@ Instructions:
{isPro ? (
⚡ Pro{proDaysLeft !== null ? ` · ${proDaysLeft}d` : ''}
diff --git a/src/components/SasquatchProDialog.tsx b/src/components/SasquatchProDialog.tsx
index 9f1721c..6de310e 100644
--- a/src/components/SasquatchProDialog.tsx
+++ b/src/components/SasquatchProDialog.tsx
@@ -6,6 +6,7 @@
* no-ads, community-funded app — Pro is the thank-you.
*/
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useEffect, useState } from 'react';
import QRCode from 'qrcode';
import {
@@ -112,7 +113,7 @@ export function SasquatchProDialog({
{t('sasquatchUi.proSupporter')}
{expiresAt && (
- {t('sasquatchUi.activeUntil', { date: new Date(expiresAt * 1000).toLocaleDateString() })}
+ {t('sasquatchUi.activeUntil', { date: new Date(expiresAt * 1000).toLocaleDateString(dateLocaleCode()) })}
)}
diff --git a/src/components/SpotChat.tsx b/src/components/SpotChat.tsx
index 8bf5c3a..9665dd3 100644
--- a/src/components/SpotChat.tsx
+++ b/src/components/SpotChat.tsx
@@ -1,5 +1,5 @@
import { useEffect, useMemo, useRef, useState } from 'react';
-import { formatDistanceToNowStrict } from 'date-fns';
+import { formatDistanceToNowStrict } from '@/lib/dateFnsI18n';
import { Link } from 'react-router-dom';
import { nip19 } from 'nostr-tools';
import { MessageCircle, Send, Radio, Info, Globe } from 'lucide-react';
diff --git a/src/components/SpotMap.tsx b/src/components/SpotMap.tsx
index 61926f9..c2d4b03 100644
--- a/src/components/SpotMap.tsx
+++ b/src/components/SpotMap.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useEffect, useRef, useMemo, useCallback } from 'react';
import L from 'leaflet';
import 'leaflet.markercluster';
@@ -621,7 +622,7 @@ function createPopupContent(
const dayDiv = document.createElement('div');
dayDiv.className = 'p-1';
const date = new Date(day.date);
- const dayName = date.toLocaleDateString('en-US', { weekday: 'short' });
+ const dayName = date.toLocaleDateString(dateLocaleCode(), { weekday: 'short' });
dayDiv.innerHTML = `
${escapeHtml(dayName)}
${escapeHtml(day.weatherIcon)}
@@ -1372,8 +1373,8 @@ export function SpotMap({
const details = document.createElement('div');
details.className = 'space-y-1.5 mb-3 text-xs text-gray-300';
const startDate = new Date(evt.start * 1000);
- const dateStr = startDate.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric' });
- const timeStr = startDate.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
+ const dateStr = startDate.toLocaleDateString(dateLocaleCode(), { weekday: 'short', month: 'short', day: 'numeric' });
+ const timeStr = startDate.toLocaleTimeString(dateLocaleCode(), { hour: 'numeric', minute: '2-digit' });
details.appendChild(popupRow('🗓️', `${dateStr} · ${timeStr}`));
if (evt.location) {
details.appendChild(popupRow('📍', evt.location));
diff --git a/src/components/TourCard.tsx b/src/components/TourCard.tsx
index 8020f9e..544c882 100644
--- a/src/components/TourCard.tsx
+++ b/src/components/TourCard.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useState } from 'react';
import { Link } from 'react-router-dom';
import { Card, CardContent, CardHeader } from '@/components/ui/card';
@@ -72,12 +73,12 @@ function formatDateRange(startDate?: number, endDate?: number, withTime = false)
});
}
- const startStr = start.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
+ const startStr = start.toLocaleDateString(dateLocaleCode(), { month: 'short', day: 'numeric' });
if (!endDate) return startStr;
const end = new Date(endDate * 1000);
- const endStr = end.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
+ const endStr = end.toLocaleDateString(dateLocaleCode(), { month: 'short', day: 'numeric', year: 'numeric' });
return `${startStr} - ${endStr}`;
}
diff --git a/src/components/TradeReputationPanel.tsx b/src/components/TradeReputationPanel.tsx
index 8ce7dea..f3cefb1 100644
--- a/src/components/TradeReputationPanel.tsx
+++ b/src/components/TradeReputationPanel.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { Link } from 'react-router-dom';
import type { NostrEvent } from '@nostrify/nostrify';
import { Star, ThumbsUp, ArrowUpRight } from 'lucide-react';
@@ -28,7 +29,7 @@ function ReviewRow({ ev, selfPubkey }: { ev: NostrEvent; selfPubkey: string }) {
const picture = author.data?.metadata?.picture;
const given = ev.pubkey === selfPubkey;
- const date = new Date(ev.created_at * 1000).toLocaleDateString();
+ const date = new Date(ev.created_at * 1000).toLocaleDateString(dateLocaleCode());
return (
diff --git a/src/components/comments/Comment.tsx b/src/components/comments/Comment.tsx
index e42dc3d..5b963f7 100644
--- a/src/components/comments/Comment.tsx
+++ b/src/components/comments/Comment.tsx
@@ -13,7 +13,7 @@ import { Card, CardContent } from '@/components/ui/card';
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
import { MessageSquare, ChevronDown, ChevronRight, MoreHorizontal, Flag } from 'lucide-react';
-import { formatDistanceToNow } from 'date-fns';
+import { formatDistanceToNow } from '@/lib/dateFnsI18n';
import { genUserName } from '@/lib/genUserName';
interface CommentProps {
diff --git a/src/components/wallet/CashuWalletCard.tsx b/src/components/wallet/CashuWalletCard.tsx
index 5ff5b45..9d387bd 100644
--- a/src/components/wallet/CashuWalletCard.tsx
+++ b/src/components/wallet/CashuWalletCard.tsx
@@ -1,3 +1,4 @@
+import { dateLocaleCode } from '@/lib/dateFnsI18n';
import { useState, useEffect, useCallback } from 'react';
import { useCashu } from '@/hooks/wallet/useCashu';
import { useMintManager } from '@/hooks/wallet/useMintManager';
@@ -637,7 +638,7 @@ function CashuWalletCardNative() {
{entry.type === 'receive' && t('walletUi.cashu.receivedToken')}
- {new Date(entry.timestamp).toLocaleDateString()}
+ {new Date(entry.timestamp).toLocaleDateString(dateLocaleCode())}