js強大的日期格式化函數,不僅可以格式化日期,還可以查詢星期,一年中第幾天等

来源:https://www.cnblogs.com/jsfuns/archive/2018/03/10/8541593.html
-Advertisement-
Play Games

js強大的日期格式化,timestamp支持10位或13位的時間戳,或是時間字元串,同時支持android ios的處理,不只是日期的格式化還有其它方法,比如獲 獲取某月有多少天 、獲取某個日期在這一年的第幾周、一年中的第幾天、一周中的第幾天等方法 ...


js強大的日期格式化,timestamp支持10位或13位的時間戳,或是時間字元串,同時支持android ios的處理,不只是日期的格式化還有其它方法,比如獲 獲取某月有多少天 、獲取某個日期在這一年的第幾周、一年中的第幾天、一周中的第幾天等方法

源碼:

/**
* js日期格式化,timestamp支持10位或13位的時間戳,或是時間字元串
* @param{string} format傳進來的字元串,Y-m-d H:i:s每個字母所代表的意思詳見代碼
* @param{int string}timestamp 要格式化的時間 預設為當前時間可以是日期形式的字元串,可以是10位或13位的時間戳
* @return {string} 格式化的時間字元串
*/
function dateFormat(format, timestamp){ 
	if(timestamp=="" || timestamp==null || format=="") return ""

	//如果傳進來的是 日期的字元串形式,變回時間戳
	if(typeof(timestamp)=="string"){
	//相容ios
	var timestamp = timestamp.replace("T"," ")
	if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { 
	timestamp = timestamp.replace(/\-/g, "/"); 
	}
	if (timestamp.indexOf("-")!==false || timestamp.indexOf("/")!==false ) timestamp = new Date(timestamp).getTime()
	}
	//如果傳進來的是10位的時間戳 變成13位的
	if(timestamp.toString().length == 10) timestamp = timestamp * 1000
	//如果到這一步,依然不是13位的時間戳,說明數據有問題
	timestamp = parseInt(timestamp)
	if(timestamp.toString().length != 13) return ""

	var a, jsdate= new Date(timestamp);
	var pad = function(n, c){
	if((n = n + "").length < c){
	return new Array(++c - n.length).join("0") + n;
	} else {
	return n;
	}
	};
	var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
	var txt_ordin = {1:"st", 2:"nd", 3:"rd", 21:"st", 22:"nd", 23:"rd", 31:"st"};
	var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 
	var f = {
	// Day
	d: function(){return pad(f.j(), 2)},//2位天,02
	D: function(){return f.l().substr(0,3)},//星期單詞的前三位
	j: function(){return jsdate.getDate()},//天2
	l: function(){return txt_weekdays[f.w()]},//星期英文
	N: function(){return f.w() + 1},//星期的某一天的數字 星期日為1
	S: function(){return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'},
	w: function(){return jsdate.getDay()},//星期的某一天的數字 星期日為0
	z: function(){return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0},//當前時間是一年中的第幾天
	// Month
	F: function(){return txt_months[f.n()]},//月份英文
	m: function(){return pad(f.n(), 2)},//2位月02
	M: function(){return f.F().substr(0,3)},//月份英文前三個字母
	n: function(){return jsdate.getMonth() + 1},//月2
	t: function(){ //當前月總共有多少天
	var n;
	if( (n = jsdate.getMonth() + 1) == 2 ){
	return 28 + f.L();
	} else{
	if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
	return 31;
	} else{
	return 30;
	}
	}
	},
	// Year
	L: function(){var y = f.Y();return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0},	
	//年
	Y: function(){return jsdate.getFullYear()},
	y: function(){return (jsdate.getFullYear() + "").slice(2)},	
	// Time
	a: function(){return getHours(jsdate) > 11 ? "pm" : "am"},
	A: function(){return f.a().toUpperCase()},
	B: function(){
	// peter paul koch:
	var off = (jsdate.getTimezoneOffset() + 60)*60;
	var theSeconds = (getHours(jsdate) * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
	var beat = Math.floor(theSeconds/86.4);
	if (beat > 1000) beat -= 1000;
	if (beat < 0) beat += 1000;
	if ((String(beat)).length == 1) beat = "00"+beat;
	if ((String(beat)).length == 2) beat = "0"+beat;
	return beat;
	},
	g: function(){return getHours(jsdate) % 12 || 12},
	G: function(){return getHours(jsdate)},
	h: function(){return pad(f.g(), 2)},
	H: function(){return pad(getHours(jsdate), 2)},
	i: function(){return pad(jsdate.getMinutes(), 2)},
	s: function(){return pad(jsdate.getSeconds(), 2)},
	//u not supported yet
	// Timezone
	//e not supported yet
	//I not supported yet
	O: function(){
	var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
	if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
	return t;
	},
	P: function(){var O = f.O();return (O.substr(0, 3) + ":" + O.substr(3, 2))},
	//T not supported yet
	//Z not supported yet
	// Full Date/Time
	c: function(){return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()},
	//r not supported yet
	U: function(){return Math.round(jsdate.getTime()/1000)}
	};
	//相容ios 
	function getHours(dateObj){
	//因為上邊已經將UTC的時間進行了轉換,把T去了,所以這裡用同樣的方法即可
	return dateObj.getHours(); 

	if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { 
	return dateObj.getUTCHours();
	}else{
	return dateObj.getHours(); 
	}
	} 

	var ret =""
	return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){
	if( t!=s ){
	// escaped
	ret = s;
	} else if( f[s] ){
	// a date function exists
	ret = f[s]();
	} else{
	// nothing special
	ret = s;
	}
	return ret;
	});
}

使用示例:

//年月日時分秒
var temp = dateFormat("Y-m-d H:i:s",new Date().getTime());
console.log(temp);
//月日
var temp = dateFormat("m-d","2018-02-24");
console.log(temp);
//星期月份
var temp = dateFormat("F","2018-02-24");
console.log(temp);
//星期英文
var temp = dateFormat("l","2018-02-24");
console.log(temp);
//一周中的第幾天,周日為第一天
var temp = dateFormat("N","2018-02-24");
console.log(temp);
//一周中的第幾天,周一為第一天
var temp = dateFormat("w","2018-02-24");
console.log(temp);
//一年中的第幾天
var temp = dateFormat("z","2018-02-24");
console.log(temp);
//獲取某個日期在這一年的第幾周   Math.ceil(一年中第幾天 / 7)
var temp = Math.ceil( dateFormat("z","2018-03-10") / 7)
console.log(temp);
//獲取某月有多少天
var temp = dateFormat("t","2018-02-24");
console.log(temp);

來源:jsfun.cn


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天算是結束了課程3的內容,已經很晚了,23:39...我就直接貼代碼了。 理解或是疑問都寫在註釋里了,老師說的邊寫註釋邊看代碼還是很有用的。 這樣下去不行啊,首先是進度的問題,明天就是周天了,原本計劃這周結束node.js基礎,下周開始ES6的,任務根本就沒完成。 待會兒在日記里總結一下吧。 不然 ...
  • Document ...
  • 說到Javascript的繼承,相信只要是前端開發者都有所瞭解或應用,因為這是太基礎的知識了。但不知各位有沒有深入去理解其中的玄機與奧秘。今本人不才,但也想用自己的理解來說一說這其中的玄機和奧秘。 一、類繼承的發展吏 function實現的繼承 function的繼承是完全模仿了OOP的編程思想。實 ...
  • 網頁中的音視頻 <audio> 和 <vedio> 標簽屬性:autoplay 自動播放 controls 控制播放 loop 迴圈播放 表單 HTML 表單用於收集用戶輸入。 標簽<form> 標簽屬性 action 數據的路徑 enctype 傳輸文件 enctype="multipart/fo ...
  • ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。 因為當前版本的ES6是在2015年發佈的,所以又稱ECMAScript 2015(簡稱ES2015)。雖然瀏覽器在不斷更新,但並不是所有用戶的電腦瀏覽器都支持ES6,所以在使用的過程中建議還是轉成es5,保證代碼的可 ...
  • 面試技術問題: l NULL的類型是object;undefined的類型是undefined類型,一個變數如果沒有初始化的話就是undefined。 l null 表示此處數值為空,undefined表示此處應該有值,但是確缺少值。null轉為數字是0,undefined轉為數字是NaN l nu ...
  • ES3 ES5this的指向問題 this指的是該函數被調用的對象 ES6的箭頭函數 箭頭函數的this指的是定義時this的指向,b在定義時,this指向的是c被定義時的函數 ...
  • js模擬form表單提交數據, js模擬a標簽點擊跳轉,避開使用window.open引起來的瀏覽器阻止問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...