ตอนแรกจะใช้ Moment.js ในการเปลี่ยนวันที่, เวลาที่แสดงให้เป็นรูปแบบตามภาษาที่ใช้ในแต่ละประเทศ ( locale ) แต่แล้วกลับเจอ Project Status โดยสรุปคือ ไม่ใช่มัน หรือไปใช้ date-fns แทน เลยต้องลองเปลี่ยนมาเป็นตัวนี้แทน
- ติดตั้งโดยใช้ command
npm install date-fns
npm install --save-dev @types/date-fns - เพิ่มในไฟล์ app.ts
12345678910111213
//date-fns
const DATETIME_PATTERNS = 'yyyy-MM-dd HH:mm:ss';
import { enUS as getLocale } from 'date-fns/locale';
import { format } from 'date-fns';
import { formatDistance } from 'date-fns/formatDistance';
import { formatWithOptions } from 'date-fns/fp';
window.DATETIME_PATTERNS = DATETIME_PATTERNS;
window.format = format;
window.formatDistance = formatDistance;
window.formatWithOptions = formatWithOptions;
window.getLocale = getLocale;
- สร้างไฟล์ date-fns.ts ในที่เดียวกับ app.ts1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
//date-fns
import { format } from 'date-fns';
import { formatWithOptions } from 'date-fns/fp';
import * as locales from 'date-fns/locale'
import formatDistance from 'date-fns/formatDistance';
import formatRelative from 'date-fns/formatRelative';
import subDays from 'date-fns/subDays';
// Type for locale keys
type DateFnsLocaleKey = keyof typeof locales
// Common date patterns
export const DATETIME_PATTERNS = {
datetime: 'Pp',
full: 'PPPPp',
long: 'PPPP',
medium: 'PP',
short: 'P',
time: 'p'
} as const;
// Helper function for date formatting
export const formatDate = (
date: Date | string,
formatString: string,
language: string
): string => {
const dateObject = typeof date === 'string' ? new Date(date) : date
return formatWithOptions(
{ locale: getLocale(language) },
formatString
)(dateObject)
}
// Function to get locale dynamically
export const getLocale = (language: string) => {
// Convert language code to match date-fns locale naming
const localeKey = language === 'en' ? 'enUS' : language
// Safely access locale
const locale = locales[localeKey as DateFnsLocaleKey]
return locale || locales.enUS // Fallback to English
}
/*
const date = new Date();
const formattedDate = formatDate(date, DATETIME_PATTERNS.full, 'th');
console.log(formattedDate);
const locale = getLocale('jp');
console.log(locale);
*/
- ทดสอบโดย12345678
const currentDate = new Date();
console.log('Date:', currentDate);
// Format the date using the user's locale and a pattern
const formattedDate = formatDate(currentDate, PATTERNS.full, userLanguage);
console.log('Formatted Date:', formattedDate);
- และเปลี่ยนภาษาของ chrome ตามวิธี Change the language of your Chrome browser
ในส่วน DATETIME_PATTERNS จริง ๆ แล้วเป็นแค่การประกาศตัวแปรสำเร็จรูปไว้ สามารถให้ patterns ของตัวเองได้ โดยดูได้จาก format