首頁 web前端 js教程 js時間日期格式化封裝函數_javascript技巧

js時間日期格式化封裝函數_javascript技巧

May 16, 2016 pm 04:29 PM
js 日期 時間 格式化

  js雖然提供了各種取得時間Date物件的不同屬性方法,如:getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 ... ... 等等,但是卻沒有像java那樣提供一個方法來供用戶來根據自身提供的模板(pattern),來格式化指定時間對象,所以自己就封裝了一個小方法,只供大家閒來調侃-.-,有好的建議還望慷慨指薦哦。

用到知識點:

 arguments:此物件代表正在執行的函數和呼叫它的函數的參數。不可明確創建,雖然有length屬性,且能像數組一樣以“[]”語法方式取值,但它並不是一個數組。 typeof object :運算符,傳回一個用來表示表達式的資料類型的字串。六種可能: "number," "string," "boolean," "object," "function," 和 "undefined."。 object.constructor:表示建立物件的函數。

object必須是物件或函數的名稱。基礎資料沒有該屬性。 exec 方法:以正規表示式模式在字串中執行查找,並傳回包含該查找結果的一個陣列。沒有找到匹配,則它返回 null。數組中同類型匹配元素不會重複出現。 str.split(Rex|str):以一個正規物件或子字串,將一個字串分割為子字串,然後將結果作為字串陣列傳回。 throw Error('msg'):拋出一個帶有Message訊息的Error。 throw 後面可跟任何表達式。 還有一些for..in用法,三目運算符,substr這些就不講了,比較簡單。

程式碼片段:

複製程式碼 程式碼如下:

/**
 * ***js時間日期格式化***

 *


 * 模版字串採嚴謹格式,超出則會拋出異常,且每類格式只可出現一次,如:yyyy-mm-yyyy 格式會拋出異常
 *


 * y-年    length: 2/4位元

 * q-季度    length: 1位元

 * M-月    length: 1~2位

 * d-日    length: 1~2位

 * H-時    length: 1~2位24小時制,h:12小時制

 * m-分    length: 1~2位元

 * s-秒    length: 1~2位

 * S-毫秒 length: 固定1位
 * @param {Date類型物件} date
 * @param {String類型範本字串} fmt
 * @return 格式化後時間日期字串
 * @author lyt
 */
function DateFormat(date, fmt){
    if (arguments.length != 2) // 參數個數校驗
        throw Error('arguments長度不合法');
    if (!date || (typeof date != 'object') || (d.constructor != Date)) // 參數合法性校驗
        throw Error(arguments[0] ':型別不為Date型別');
    if (/H /.test(fmt) && /h /.test(fmt))
        throw Error("小時格式錯誤,同類型只能連續出現一次!");
    /* 範本參數校驗,正規驗證方法 */
    var verify = function(Rex ){
        var arr = new RegExp(Rex).exec(fmt); // 獲得符合結果陣列
        if (!arr) // 配對失敗回傳
            return "";
        if (fmt.split(Rex).length > 2)  // 相同類型間隔出現多次
            throw Error("fmt格式錯誤:同型別只能連續出現一次!");
        return arr[0];
    };
    /**
     * 提供月、天、時、分、秒通用配對替換
     * @param {物件o屬性key} r
     * @param {r對應正規物件} rex
     **/
    var common = function(r, rex) {
        if(len !=1 && len !=2)
            throw Error("月份格式錯誤:M只能出現1/2次");
len == 2 ? fmt=fmt.replace(rex, o[r].length==1 ? "0" o[r] : o[r]) : fmt=fmt.replace(rex, o[r]) ;
    }
    var o = { // 資料儲存物件
        "y ": date.getFullYear() "", // 年
        "q ": Math.floor((date.getMonth() 3) / 3), // 季度
        "M ": date.getMonth() 1 "", // 月
        "d ": date.getDate() "", // 日
        "H ": date.getHours() "", // 24時
        "h ": date.getHours() "", // 12時
        "m ": date.getMinutes() "", // 分
        "s ": date.getSeconds() "", // 秒
        "S ": date.getMilliseconds() // 毫秒
    }
    for(var r in o) {
        var rex, len, temp;
        rex = new RegExp(r);
        temp = verify(rex); // 符合所得字串
        len = temp.length; // 長度
        if(!len || len == 0)
            continue;
        if(r == "y ") {
            if(len !=2 && len != 4)
                throw Error("年份格式錯誤:y且只能出現2/4次");
            len == 2 ? fmt=fmt.replace(rex, o[r].substr(2,3)) : fmt=fmt.replace(rex, o[r]);
        } else if(r == "q ") {
            if(len != 1)
                throw Error("季度格式錯誤:q只能出現1次");
            fmt=fmt.replace(rex, o[r]);
        } else if(r == "h ") {
            if(len !=1 && len !=2)
                throw Error("小時格式錯誤:h且只能出現1/2次");
            var h = (o[r] > 12 ? o[r]-12 : o[r]) "";
            len == 2 ? fmt=fmt.replace(rex, h.length==1 ? "0" h : h) : fmt=fmt.replace(rex, h);
        }  else if(r == "S ") {
            if(len != 1)
                throw Error("毫秒數格式錯誤:S只能出現1次");
            fmt=fmt.replace(rex, o[r]);
        }else {    // (r=="M " || r=="d " || r=="H " || r=="m " || r=="s ")
            common(r, rex)
        } 
    }
    return fmt;
}

上幾個示範效果,供大家參考:

複製程式碼 程式碼如下:
console.log(DateFormat(new Date(),'yyyy年第q季度M月dd日HH時m分s秒S毫秒'));

複製程式碼 程式碼如下:
console.log(DateFormat(new Date(),'yyyyyyy.第q季度M月dd日HH時m分s秒S毫秒'));

複製程式碼 程式碼如下:
console.log(DateFormat(new Date(),'yyyy年第q季度M月dd日Hh時m分s秒S毫秒'));

複製程式碼 程式碼如下:
console.log(DateFormat("我不是時間物件",'yyyy年第q季度M月dd日Hh時m分s秒S毫秒'));

複製程式碼 程式碼如下:
console.log(DateFormat(new Date(),'yyyy年第q季度MMM月dd日HH時m分s秒S毫秒'));

其他效果就不一一列舉了,感興趣的可以把程式碼拷貝下來直接測試就行了,有任何BUG或者有待優化的地方請慷慨指正哦。

以上便是這款非常好用的封裝函數的介紹了,是不是很實用呢,小伙伴們可以直接使用到自己的項目中。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 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)

微博怎麼能按日期找以前的微博_微博按日期找以前的微博方法 微博怎麼能按日期找以前的微博_微博按日期找以前的微博方法 Mar 30, 2024 pm 07:26 PM

1.先開啟手機網路瀏覽器,搜尋微博網頁版,進入後點選左上角頭像按鈕。 2、然後點選右上角設定。 3.點選設定裡面的版本切換選項。 4.接著在版本切換裡選擇彩版選項。 5.點選搜索,進入搜尋頁面。 6.輸入關鍵字後,點選找人。 7.出來的搜尋完成介面點選篩選。 8.最後在發佈時間欄輸入特定日期後,點選篩選即可。

抖音10級燈牌多少錢? 10級粉絲燈牌需要幾天? 抖音10級燈牌多少錢? 10級粉絲燈牌需要幾天? Mar 11, 2024 pm 05:37 PM

在抖音平台上,許多用戶都渴望獲得等級認證,其中10級燈牌更是展示用戶在抖音上的影響力和認可度。本文將深入探討抖音10級燈牌的價格以及達到此等級所需的時間,以幫助使用者更了解此過程。一、抖音10級燈牌多少錢?抖音10級燈牌的價格會受市場波動和供需情況的影響而有所差異,一般價格在幾千元到萬元之間。這個價格主要包括燈牌本身的成本和可能的服務費用。用戶可透過抖音官方管道或第三方服務機構購買10級燈牌,但在購買時要留意選擇合法管道,以免遭遇虛假或詐欺交易。二、10級粉絲燈牌要幾天?達到10級燈牌

PPT講義列印自動出現的日期進行去除的操作方法 PPT講義列印自動出現的日期進行去除的操作方法 Mar 26, 2024 pm 08:16 PM

1.先說說我剛開始用的方法,或許大家也在用。先是打開【視野】——】備註模版【。 2.打開後確實能看到日期的地方。 3.先選擇它,並把它刪除。 4.刪除後點選【關閉母版檢視】。 5.再開啟列印預覽,發現日期還是在。 6.其實這個日期不是在這個地方刪除的。應該是在【講義母版】那裡。看下圖。 7.找到日期後把它刪除。 8.現在在打開預覽看一下,就沒有這個日期了。註:其實這個方法也很容易記,因為印刷的是講義,所以應該找【講義母版】。

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

艾爾登法環通關需要多久 艾爾登法環通關需要多久 Mar 11, 2024 pm 12:50 PM

玩家在艾爾登法環中進行遊戲時可以體驗遊戲主線劇情,以及收集遊戲成就,有很多玩家不知道艾爾登法環通關需要多久,玩家的通關流程在30個小時。艾爾登法環通關需要多久答:30小時。 1、這個30小時的通關時長指的雖然不是高手般的速通,但也省略了許多的流程。 2.如果你想獲得更好的遊戲體驗或是體驗完整的劇情,那麼時長上肯定要花費更多的時間。 3.如果玩家是全收集大約要100-120小時。 4.如果是只走主線刷BOSS大約:50-60小時。 5.如果是想全部體驗:150小時打底。

小紅書發佈作品時間怎麼設定?發布作品時間準確嗎? 小紅書發佈作品時間怎麼設定?發布作品時間準確嗎? Mar 24, 2024 pm 01:31 PM

小紅書,一個充滿生活氣息與知識分享的平台,讓越來越多的創作者在這裡暢所欲言。要想在小紅書上獲得更多的關注和點贊,除了內容品質之外,發布作品的時間也是至關重要的。那麼,如何設定小紅書發布作品的時間呢?一、小紅書發布作品時間怎麼設定? 1.了解用戶活躍時間首先,需要先明確小紅書用戶的活躍時間。通常來說,晚上8點到10點以及週末下午是用戶活躍度較高的時段。然而,這個時段也會受到受眾群體和地理等因素的影響而有所不同。因此,為了更能掌握用戶活躍時段,建議對不同族群的行為習慣進行更詳細的分析。透過了解用戶的活

Linux 檔案時間查看技巧詳解 Linux 檔案時間查看技巧詳解 Feb 21, 2024 pm 01:15 PM

Linux檔案時間檢視技巧詳解在Linux系統中,檔案的時間資訊對於檔案管理和追蹤變更非常重要。 Linux系統透過三種主要時間屬性來記錄檔案的變更訊息,分別是存取時間(atime)、修改時間(mtime)和變更時間(ctime)。本文將詳細介紹如何查看和管理這些文件時間信息,並提供具體的程式碼範例。 1.查看文件時間資訊透過使用ls指令結合參數-l可以列出文

手機格式化恢復方法大揭密(手機故障?別急) 手機格式化恢復方法大揭密(手機故障?別急) May 04, 2024 pm 06:01 PM

現今,無法開機等,卡頓,我們難免會遇到一些問題,例如係統崩潰、但在使用過程中、手機已成為我們生活中不可或缺的一部分。我們往往束手無策、有時、對於這些問題的解決方法。幫助你解決手機故障,本文將為大家介紹一些手機格式化恢復的方法、讓手機重新恢復正常運作。備份資料-保護重要資訊安全通訊錄等,如照片、聯絡人、以免在格式化過程中遺失、在進行手機格式化之前、首先要考慮的是備份手機上的重要資料和檔案。確保資料的安全性、或選擇將檔案傳輸至雲端儲存服務中,可以透過連接電腦進行備份。使用系統自備恢復功能-簡

See all articles