首頁 web前端 js教程 原生粉碎日期與時間格式:釋放 Intl.DateTimeFormat 的隱藏力量

原生粉碎日期與時間格式:釋放 Intl.DateTimeFormat 的隱藏力量

Jan 10, 2025 pm 08:28 PM

Crush Date and Time Formatting Natively: Unleash the Hidden Power of Intl.DateTimeFormat

Native Intl API 簡介

JavaScript 中的 Intl API 是一種強大的本機解決方案,用於處理各種語言的資料(例如日期、數字和文字)的局部化和格式設定。與許多第三方函式庫不同,這些 API 提供:

  • 高效能:整合到 JavaScript 引擎。

  • 更小的套件大小:消除了對外部依賴項的需要。

  • 全球支援:包含多種語言和地區的在地化。

與外部程式庫不同,本機 API 不需要開發人員更新或維護。此外,它們還針對底層 JavaScript 引擎進行了最佳化,提供了更輕、更快的在地化和格式化方法。

在本文中,我們將重點放在 Intl.DateTimeFormat,這是一個專門用於根據所需本地化設定日期和時間格式的 API。我們將了解此 API 如何取代 Moment.js、date-fns 或 Day.js 等流行函式庫來滿足格式化需求,從而提供現代且原生的替代方案。


Intl.DateTimeFormat 的描述

Intl.DateTimeFormat 是一個允許本地化日期和時間格式的類別。它提供了高級功能,例如支援不同的本地化、可自訂的格式以及處理替代日曆和時區。


建立格式化程式

格式化程式是 Intl.DateTimeFormat 的一個實例,它儲存日期格式化的特定配置。透過使用格式化程序,您可以重複將相同的格式套用於不同的日期,使您的程式碼更有效率和可讀。

要建立格式化程序,請使用帶有所需參數的 Intl.DateTimeFormat 建構子:

const formatter = new Intl.DateTimeFormat(locale, options);
登入後複製
登入後複製
  • locale:定義在地化的字串(例如,「en-US」表示美式英語,「it-IT」表示義大利語)。

  • options:用於指定日期組成部分的選用物件(例如,工作日、月份、年份等)。

雖然將格式化程式實例保存在變數中以供重用是很常見的,但這一步並不是嚴格要求的。可以直接呼叫 Intl.DateTimeFormat 建構子來內嵌日期格式,如下所示:

console.log(new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric' }).format(new Date(2024, 11, 19)));
// Output: "December 19, 2024"
登入後複製
登入後複製

但是,當需要將相同的格式套用到多個日期時,建立格式化程式實例就變得特別有用,可以提高程式碼一致性並避免冗餘:

const formatter = new Intl.DateTimeFormat(locale, options);
登入後複製
登入後複製

基本範例:Intl.DateTimeFormat 入門

透過這些基礎範例來探索 Intl.DateTimeFormat 的簡單性和強大功能。我們將示範如何建立可在您的應用程式中重複使用的預設格式和自訂格式的格式化程式。

1. 預設格式

如果未提供選項,格式化程式將使用所選語言環境的預設格式。

console.log(new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric' }).format(new Date(2024, 11, 19)));
// Output: "December 19, 2024"
登入後複製
登入後複製

2. 自訂格式

透過指定所需的選項來自訂輸出。

const formatter = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});

console.log(formatter.format(new Date(2024, 11, 19))); // Output: "December 19, 2024"
console.log(formatter.format(new Date(2023, 5, 15))); // Output: "June 15, 2023"
登入後複製

進階範例:釋放 Intl.DateTimeFormat 的全部潛力

透過高級方案將日期和時間格式提升到一個新的水平,例如處理多個本地化、備用日曆和時區。這些範例展示了 Intl.DateTimeFormat 在複雜應用中的多功能性和適應性。

1. 處理不同的局部化

const date = new Date(2024, 11, 19);
const formatter = new Intl.DateTimeFormat('en-US');
console.log(formatter.format(date)); // Output: "12/19/2024"
登入後複製

2. 使用替代行事曆進行格式化

const date = new Date(2024, 11, 19);
const formatter = new Intl.DateTimeFormat('en-US', {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});
console.log(formatter.format(date)); // Output: "Thursday, December 19, 2024"
登入後複製

3. 處理時區

const date = new Date(2024, 11, 19);
const italianFormatter = new Intl.DateTimeFormat('it-IT', {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});
console.log(italianFormatter.format(date)); // Output: "giovedì 19 dicembre 2024"
登入後複製

TypeScript 和 Intl.DateTimeFormat

將 Intl.DateTimeFormat 與 TypeScript 結合使用可確保類型安全和更好的開發體驗。 Intl.DateTimeFormat 的 TypeScript 定義是內建的,為其方法和屬性提供自動完成和文件。

這是一個例子:

const islamicFormatter = new Intl.DateTimeFormat('ar-SA-u-ca-islamic');
console.log(islamicFormatter.format(new Date(2024, 11, 19))); // Output: Date in the Islamic calendar
登入後複製

嚴格類型化有助於透過在編譯時捕獲潛在問題(例如不正確的選項或方法呼叫)來避免執行階段錯誤。


與流行圖書館的比較

為什麼要考慮 Intl.DateTimeFormat?

  • 輕量級:它是原生的,不需要外部函式庫,減少了套件大小。

  • 效能:通常比基於函式庫的解決方案更快。

  • 內建本地化:原生支援多種語言和日曆。

範例:簡單格式設定

使用 Moment.js

const date = new Date(Date.UTC(2024, 11, 19, 15, 30)); // Ensure the date is set in UTC

// Formatter for UTC
const utcFormatter = new Intl.DateTimeFormat('en-US', {
  timeZone: 'UTC',
  year: 'numeric',
  month: 'short',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  timeZoneName: 'short',
});
console.log(utcFormatter.format(date)); 
// Output: "Dec 19, 2024, 03:30 PM UTC"

// Formatter for Tokyo time zone
const tokyoFormatter = new Intl.DateTimeFormat('ja-JP', {
  timeZone: 'Asia/Tokyo',
  year: 'numeric',
  month: 'short',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  timeZoneName: 'short',
});
console.log(tokyoFormatter.format(date)); 
// Output: "2024/12/20 00:30 JST"

// Formatter for Berlin time zone
const berlinFormatter = new Intl.DateTimeFormat('de-DE', {
  timeZone: 'Europe/Berlin',
  year: 'numeric',
  month: 'short',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  timeZoneName: 'short',
});
console.log(berlinFormatter.format(date)); 
// Output: "19. Dez. 2024, 16:30 MEZ"
登入後複製

帶有 date-fns

const formatter: Intl.DateTimeFormat = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});

const formattedDate: string = formatter.format(new Date(2024, 11, 19));
console.log(formattedDate); // Output: "December 19, 2024"
登入後複製

使用 Day.js

const moment = require('moment');
console.log(moment("2024-12-19").format('dddd, MMMM Do YYYY'));
登入後複製

使用 Intl.DateTimeFormat

const { format } = require('date-fns');
console.log(format(new Date(2024, 11, 19), 'EEEE, MMMM do yyyy'));
登入後複製

雖然外部函式庫可能提供語法糖,但本機 API 提供了等效的功能,而不會犧牲靈活性或效率。本機 API 稍長的語法是對其在可維護性、效能和簡單性方面的優勢的一個小小的權衡。


結論

Intl.DateTimeFormat 為日期和時間格式化提供了強大的本機解決方案,使其成為 Moment.js、date-fns 和 Day.js 等流行庫的絕佳替代品。憑藉其高效能、​​內建本地化和簡化的維護,它是現代 JavaScript 應用程式的寶貴工具。

要深入了解 Intl.DateTimeFormat 並探索其他功能,請造訪官方 MDN Web 文件。在那裡,您將找到全面的文件和實際範例,以幫助您掌握這個強大的 API。

以上是原生粉碎日期與時間格式:釋放 Intl.DateTimeFormat 的隱藏力量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在行動中:現實世界中的示例和項目 JavaScript在行動中:現實世界中的示例和項目 Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

了解JavaScript引擎:實施詳細信息 了解JavaScript引擎:實施詳細信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:社區,圖書館和資源 Python vs. JavaScript:社區,圖書館和資源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python vs. JavaScript:開發環境和工具 Python vs. JavaScript:開發環境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

See all articles