最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript日期格式化技巧分享

 更新時(shí)間:2024年10月28日 08:29:12   作者:自由的巨浪  
在 JavaScript 中,日期和時(shí)間的處理與格式化是非常常見的需求,JavaScript 提供了內(nèi)置的 Date 對(duì)象用于操作日期和時(shí)間,但它的格式化功能較為有限,為了更方便地格式化日期,通常需要結(jié)合一些額外的工具或庫(kù),本文涵蓋了從基礎(chǔ)到進(jìn)階的日期格式化技巧

導(dǎo)讀

在 JavaScript 中,日期和時(shí)間的處理與格式化是非常常見的需求。JavaScript 提供了內(nèi)置的 Date 對(duì)象用于操作日期和時(shí)間,但它的格式化功能較為有限。為了更方便地格式化日期,通常需要結(jié)合一些額外的工具或庫(kù)。本文涵蓋了從基礎(chǔ)到進(jìn)階的日期格式化技巧。

使用原生 Date 對(duì)象

我們可以通過(guò)多種方式創(chuàng)建 Date 對(duì)象,例如傳入特定的時(shí)間戳、字符串或指定的年、月、日、時(shí)、分、秒。

const date = new Date();
const date1 = new Date(2024, 8, 13); // 注意:月份從0開始
const date2 = new Date("2024-09-13T10:20:30Z");
const date3 = new Date(1694596830000); // 時(shí)間戳

獲取日期和時(shí)間的各個(gè)部分

JavaScript 提供了各種方法來(lái)獲取日期的不同部分,例如年、月、日、小時(shí)、分鐘等。

const date = new Date();
console.log(date.getFullYear()); // 獲取年份
console.log(date.getMonth()); // 獲取月份,0表示1月,11表示12月
console.log(date.getDate()); // 獲取當(dāng)月的某一天
console.log(date.getHours()); // 獲取小時(shí)
console.log(date.getMinutes()); // 獲取分鐘
console.log(date.getSeconds()); // 獲取秒
console.log(date.getDay()); // 獲取星期幾,0表示星期天

格式化日期字符串

默認(rèn)情況下,Date 對(duì)象提供了幾種內(nèi)置的方法將日期轉(zhuǎn)換為字符串:

  • toDateString(): 返回日期的簡(jiǎn)短表示形式,例如 "Fri Sep 13 2024".
  • toTimeString(): 返回時(shí)間部分,例如 "10:20:30 GMT+0000 (Coordinated Universal Time)".
  • toISOString(): 返回標(biāo)準(zhǔn)的 ISO 8601 格式,例如 "2024-09-13T10:20:30.000Z".
  • toLocaleDateString(): 根據(jù)本地化設(shè)置格式化日期。
  • toLocaleTimeString(): 根據(jù)本地化設(shè)置格式化時(shí)間。
const date = new Date();
console.log(date.toISOString()); // 2024-09-13T10:20:30.000Z
console.log(date.toDateString()); // Fri Sep 13 2024
console.log(date.toLocaleDateString('zh-CN')); // 2024/9/13
console.log(date.toLocaleString('en-US')); // 9/13/2024, 10:20:30 AM

自定義格式化

在實(shí)際的開發(fā)中,除了通過(guò)原生的 Date 對(duì)象獲取日期數(shù)據(jù)外。需要使用自定義日期格式也是相當(dāng)大的一部分應(yīng)用場(chǎng)景,這時(shí)則需要通過(guò)手動(dòng)拼接或使用正則表達(dá)式從 Date 對(duì)象中提取不同的部分。例如:

function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份加1,確保是兩位數(shù)
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

const date = new Date();
console.log(formatDate(date)); // 2024-09-13 10:20:30

以上是一個(gè)基礎(chǔ)版本的自定義格式化方法,我們可以再擴(kuò)展一下,讓它支持自定義的時(shí)間格式:

function formatDate(date, format = "yyyy-MM-dd HH:mm:ss") {
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    const hours = date.getHours();
    const minutes = date.getMinutes();
    const seconds = date.getSeconds();
    const toSymbol = () => {
      return hours > 12 ? "PM" : "AM";
    };
    const hasSymbol = format.indexOf('a') > -1
    const symbols = {
      yyyy: year,
      MM: `${month}`.padStart(2, "0"),
      dd: `${day}`.padStart(2, "0"),
      HH: `${hours}`.padStart(2, "0"),
      hh: hasSymbol && hours > 12 ? hours - 12 : hours,
      mm: `${minutes}`.padStart(2, "0"),
      ss: `${seconds}`.padStart(2, "0"),
      // a 表示12小時(shí)制
      a: toSymbol(),
    };
    let time = format;

    Object.keys(symbols).forEach((key) => {
      time = time.replace(key, symbols[key]);
    });

    return time;
}

// 2024-10-26 PM 1:06:43 12 小時(shí)制
console.log(formatDate(new Date(), "yyyy-MM-dd a hh:mm:ss"));

本地化格式化

除了對(duì)日期自定義格式的格式化需求,針對(duì)大型的平臺(tái)型項(xiàng)目,就需要本地化格式化或者說(shuō)是國(guó)際化的日期格式化支持,新的 Intl.DateTimeFormat API 為我們國(guó)際化日期格式提供了標(biāo)準(zhǔn)接口。

Intl.DateTimeFormat

Intl.DateTimeFormat 是 JavaScript 語(yǔ)言內(nèi)置的國(guó)際化工具,允許我們以本地化方式格式化日期。

const date = new Date();
const formatter = new Intl.DateTimeFormat('zh-CN', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  hour12: false,
});
console.log(formatter.format(date)); // 2024/09/13 10:20:30

你可以通過(guò)修改選項(xiàng)來(lái)控制輸出格式,例如:

  • yearmonthday:控制日期部分
  • hourminutesecond:控制時(shí)間部分
  • hour12: 是否使用12小時(shí)制

Intl.DateTimeFormat 的瀏覽器兼容性

Intl.DateTimeFormat 的瀏覽器支持情況還是比較理想的,如果你希望使用標(biāo)準(zhǔn)的日期國(guó)際化格式的解決方案,Intl.DateTimeFormat 目前是一個(gè)不錯(cuò)的選擇。

處理時(shí)區(qū)

除了處理個(gè)性化的日期格式,國(guó)際化的日期格式外,另外一個(gè)對(duì)于大型應(yīng)用需要處理的一個(gè)日期的問(wèn)題就是處理跨時(shí)區(qū)的日期數(shù)據(jù)。

原生 JavaScript 時(shí)區(qū)

JavaScript 原生的 Date 對(duì)象默認(rèn)會(huì)根據(jù)系統(tǒng)的時(shí)區(qū)顯示時(shí)間。如果需要轉(zhuǎn)換時(shí)區(qū),可以使用 toLocaleString 方法:

const date = new Date();
console.log(date.toLocaleString('en-US', { timeZone: 'America/New_York' })); // 轉(zhuǎn)換為紐約時(shí)間

使用 moment-timezone

// 安裝 moment-timezone:npm install moment-timezone
const moment = require('moment-timezone');
const newYorkTime = moment.tz("America/New_York").format('YYYY-MM-DD HH:mm:ss');
console.log(newYorkTime); // 紐約當(dāng)前時(shí)間

使用 dayjs 時(shí)區(qū)插件

const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const timezone = require('dayjs/plugin/timezone');
dayjs.extend(utc);
dayjs.extend(timezone);

const newYorkTime = dayjs().tz("America/New_York").format('YYYY-MM-DD HH:mm:ss');
console.log(newYorkTime); // 紐約當(dāng)前時(shí)間

使用第三方庫(kù)

除了自己親歷親為處理各種日期格式問(wèn)題外,使用第三方庫(kù)來(lái)處理日期格式問(wèn)題也是一個(gè)不錯(cuò)的選擇。下面將介紹一些主流的處理日期數(shù)據(jù)第三方庫(kù)。

Moment.js (不推薦用于新項(xiàng)目)

雖然 Moment.js 曾經(jīng)是處理日期的標(biāo)準(zhǔn)庫(kù),但由于體積大、性能問(wèn)題,已經(jīng)不再推薦使用新項(xiàng)目。官方建議使用原生 API 或其他更輕量的庫(kù)。

// 安裝 Moment.js:npm install moment
const moment = require('moment');
const date = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(date); // 2024-09-13 10:20:30

Day.js

Day.js 是一個(gè)現(xiàn)代的、輕量級(jí)的日期處理庫(kù),API 設(shè)計(jì)類似于 Moment.js。

// 安裝 Day.js:npm install dayjs
const dayjs = require('dayjs');
const date = dayjs().format('YYYY-MM-DD HH:mm:ss');
console.log(date); // 2024-09-13 10:20:30

Day.js 支持多種插件擴(kuò)展,例如時(shí)區(qū)、相對(duì)時(shí)間等。

date-fns

date-fns 是另一個(gè)流行的日期處理庫(kù),功能強(qiáng)大且模塊化。你可以根據(jù)需要僅引入部分功能。

// 安裝 date-fns:npm install date-fns
const { format } = require('date-fns');
const date = new Date();
console.log(format(date, 'yyyy-MM-dd HH:mm:ss')); // 2024-09-13 10:20:30

date-fns 提供了許多實(shí)用函數(shù),如格式化、比較、時(shí)間計(jì)算等,非常適合處理復(fù)雜的日期操作。

總結(jié)

對(duì)于日期格式化,原生的 JavaScript 方法適合處理簡(jiǎn)單的日期和時(shí)間格式化。利用 Date 對(duì)象結(jié)合手動(dòng)拼接字符串可以滿足大部分需求。Intl.DateTimeFormat 這個(gè) JavaScript 內(nèi)置的國(guó)際化日期格式化工具,適合需要處理本地化格式的場(chǎng)景。

而如 Day.js 和 date-fns 提供更強(qiáng)大的功能和簡(jiǎn)便的 API,適合處理復(fù)雜的日期操作和格式化需求。大家可以根據(jù)自己的實(shí)際應(yīng)用選擇合適的解決方案。

以上就是JavaScript日期格式化技巧分享的詳細(xì)內(nèi)容,更多關(guān)于JavaScript日期格式化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實(shí)現(xiàn)簡(jiǎn)單控制視頻播放倍速的實(shí)例代碼

    JS實(shí)現(xiàn)簡(jiǎn)單控制視頻播放倍速的實(shí)例代碼

    這篇文章主要介紹了通過(guò)JS來(lái)實(shí)現(xiàn)簡(jiǎn)單控制視頻播放倍速,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 微信小程序 scroll-view實(shí)現(xiàn)錨點(diǎn)滑動(dòng)的示例

    微信小程序 scroll-view實(shí)現(xiàn)錨點(diǎn)滑動(dòng)的示例

    本篇文章主要介紹了微信小程序 scroll-view實(shí)現(xiàn)錨點(diǎn)滑動(dòng)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Bootstrap每天必學(xué)之標(biāo)簽頁(yè)(Tab)插件

    Bootstrap每天必學(xué)之標(biāo)簽頁(yè)(Tab)插件

    Bootstrap每天必學(xué)之標(biāo)簽頁(yè)(Tab)插件,通過(guò)這個(gè)插件您可以把內(nèi)容放置在標(biāo)簽頁(yè)或者是膠囊式標(biāo)簽頁(yè)甚至是下拉菜單標(biāo)簽頁(yè)中,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 如何使用JS寫個(gè)方法判斷當(dāng)前時(shí)區(qū)是否是夏令時(shí)

    如何使用JS寫個(gè)方法判斷當(dāng)前時(shí)區(qū)是否是夏令時(shí)

    文章介紹了如何使用JavaScript判斷當(dāng)前時(shí)區(qū)是否處于夏令時(shí),由于JavaScript標(biāo)準(zhǔn)庫(kù)沒(méi)有直接提供此功能,可以通過(guò)比較本地時(shí)間和UTC時(shí)間的差異來(lái)推斷,文章還提供了使用moment.js和moment-timezone插件進(jìn)行更精確夏令時(shí)檢測(cè)的示例,感興趣的朋友一起看看吧
    2024-12-12
  • JS重寫Date函數(shù)以及兼容IOS系統(tǒng)

    JS重寫Date函數(shù)以及兼容IOS系統(tǒng)

    這篇文章主要介紹了JS重寫Date函數(shù)以及兼容IOS系統(tǒng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用echart實(shí)現(xiàn)柱狀圖里的水波效果示例代碼

    使用echart實(shí)現(xiàn)柱狀圖里的水波效果示例代碼

    這篇文章主要介紹了使用echart實(shí)現(xiàn)柱狀圖里水波效果的相關(guān)資料,主要通過(guò)renderItem函數(shù)方法,返回每個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)的圖形元素,包括一個(gè)矩形和一個(gè)波浪路徑,需要的朋友可以參考下
    2026-05-05
  • KnockoutJS 3.X API 第四章之表單value綁定

    KnockoutJS 3.X API 第四章之表單value綁定

    Knockout是一個(gè)以數(shù)據(jù)模型(data model)為基礎(chǔ)的能夠幫助你創(chuàng)建富文本,響應(yīng)顯示和編輯用戶界面的JavaScript類庫(kù)。這篇文章主要介紹了KnockoutJS 3.X API 第四章之表單value綁定的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • layui彈出框Tab選項(xiàng)卡的示例代碼

    layui彈出框Tab選項(xiàng)卡的示例代碼

    今天小編就為大家分享一篇layui彈出框Tab選項(xiàng)卡的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 微信JSAPI Ticket接口簽名詳解

    微信JSAPI Ticket接口簽名詳解

    這篇文章主要為大家詳細(xì)介紹了微信JSAPI Ticket接口簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • javascript陷阱 一不小心你就中招了(字符運(yùn)算)

    javascript陷阱 一不小心你就中招了(字符運(yùn)算)

    看似簡(jiǎn)單的加法運(yùn)行,卻有很多問(wèn)題,一定要注意字符與數(shù)字的運(yùn)算,注意使用js的強(qiáng)制類型轉(zhuǎn)換,否則會(huì)出現(xiàn)很多問(wèn)題。我們?cè)诰帉慾s的過(guò)程中,最好通過(guò)alert逐行測(cè)試
    2013-11-11

最新評(píng)論

兰西县| 琼海市| 高清| 宝坻区| 芷江| 静宁县| 新密市| 靖边县| 寻乌县| 合川市| 军事| 电白县| 西吉县| 本溪市| 许昌县| 昌都县| 察哈| 句容市| 大余县| 焦作市| 阳西县| 凤冈县| 德钦县| 海晏县| 顺平县| 吉木萨尔县| 林周县| 富民县| 肇庆市| 福海县| 康马县| 宁海县| 本溪| 岳阳市| 东乡| 景宁| 文登市| 同仁县| 赤城县| 娄底市| 黄大仙区|