- MomentJS 教程
- MomentJS - 首頁
- MomentJS - 概述
- MomentJS - 環境搭建
- MomentJS - 簡介
- MomentJS - 解析日期和時間
- MomentJS - 日期驗證
- MomentJS - Getter/Setter
- 操作日期和時間
- 格式化日期和時間
- MomentJS - 日期查詢
- MomentJS - 國際化
- MomentJS - 自定義
- MomentJS - 時長
- MomentJS - 工具函式
- MomentJS - 外掛
- MomentJS - 示例
- MomentJS 有用資源
- MomentJS 快速指南
- MomentJS - 有用資源
- MomentJS - 討論
MomentJS 快速指南
MomentJS - 概述
MomentJS 是一個 JavaScript 庫,它可以非常輕鬆地解析、驗證、操作和顯示 JavaScript 中的日期/時間。本章將概述 MomentJS 並詳細討論其功能。
Moment JS 允許根據本地化和易於閱讀的格式顯示日期。您可以使用指令碼方法在瀏覽器中使用 MomentJS。它也適用於 Node.js,並且可以使用 npm 安裝。
在 MomentJS 中,您可以找到許多易於使用的新增、減去、驗證日期、獲取最大最小日期等方法。這是一個開源專案,您可以輕鬆地為庫貢獻程式碼,並以外掛的形式新增功能,使其在 GitHub 和 Node.js 上可用。
特性
讓我們詳細瞭解 MomentJS 提供的所有重要功能:
解析
解析允許您以所需格式解析日期。日期解析支援字串、物件和陣列。它允許您使用 moment.clone 克隆 moment 物件。還有一些方法可以以 UTC 格式輸出日期。
日期驗證
使用 MomentJS 進行日期驗證非常容易。您可以使用 isValid() 方法檢查日期是否有效。MomentJS 還提供許多解析標誌,可用於檢查日期驗證。
操作
Moment 物件有多種方法可以操作日期和時間。add、subtract、startoftime、endoftime、local、utc、utcoffset 等方法可以提供 MomentJS 中日期/時間所需的詳細資訊。
獲取/設定
獲取/設定允許讀取和設定日期中的單位。它允許更改和讀取小時、分鐘、秒、毫秒、月份日期、星期幾、一年中的第幾天、一年中的第幾周、月份、年份、季度、週年的年份、一年中的週數、獲取/設定、最大值、最小值等。獲取/設定是 MomentJS 中非常有用的功能。
顯示
顯示提供多種方式顯示日期的格式。有一些方法可以顯示給定時刻的時間、當前時刻的時間、兩個時刻之間的差值等。它允許以 JSON 格式、陣列、物件、字串等顯示日期。
日期查詢
日期查詢具有易於使用的函式,可以判斷日期是否大於或小於輸入值,是否在給定的日期之間,是否是閏年,是否是 moment 物件,是否是日期等。它在日期驗證中非常有用。
時長
時長是 MomentJS 中的重要功能之一。它主要處理給定單位的時間長度。可用的 humanize 方法以人類可讀的格式顯示日期。
國際化
國際化是 MomentJS 的另一個重要功能。您可以根據區域設定顯示日期和時間。如果需要,可以將區域設定應用於特定 moment 物件。您將從 MomentJS 首頁獲得包含所有區域設定的壓縮檔案。如果您只處理特定的區域設定,也可以只新增該區域設定檔案並使用它。月份、星期和星期的名稱將以指定的區域設定顯示。
自定義
MomentJS 允許自定義建立的區域設定。您可以根據需要自定義月份名稱、月份縮寫、星期幾名稱、星期幾縮寫、長日期格式和日曆格式。
工具函式
工具函式包含兩個方法:normalize units 和 invalid。它們與 moment 物件一起使用,可以幫助我們根據需要更改或自定義輸出。它還允許我們對 moment 物件設定自定義驗證。
外掛
外掛是 MomentJS 的附加功能。有很多外掛新增到日曆、日期格式、解析、日期範圍、精確範圍等。您可以新增自己的外掛,並使其在 Node.js 和 GitHub 上可用。
MomentJS - 環境搭建
本章將詳細介紹如何在本地計算機上設定 MomentJS 的工作環境。在開始使用 MomentJS 之前,您需要訪問該庫。您可以透過以下任何一種方法訪問其檔案:
方法 1:在瀏覽器中使用 MomentJS 檔案
在這種方法中,我們將從其官方網站獲取 MomentJS 檔案,並直接在瀏覽器中使用它。
步驟 1
第一步,訪問 MomentJS 的官方網站 https://momentjs.com 您將看到如下所示的首頁:
您可以看到有一個下載選項,可以下載最新的 MomentJS 檔案。請注意,該檔案有壓縮和未壓縮版本。
步驟 2
現在,在 script 標籤內包含 moment.js 並開始使用 MomentJS。為此,您可以使用以下程式碼:
<script type = "text/JavaScript" src = " https://MomentJS.com/downloads/moment.js"></script>
為了更好地理解,這裡給出一個可執行的示例及其輸出:
示例
<html>
<head>
<title>MomentJS - Working Example</title>
<script type = "text/JavaScript" src = "https://MomentJS.com/downloads/moment.js"></script>
<style>
div {
border: solid 1px #ccc;
padding:10px;
font-family: "Segoe UI",Arial,sans-serif;
width: 50%;
}
</style>
</head>
<body>
<div style = "font-size:25px" id = "todaysdate"></div>
<script type = "text/JavaScript">
var a = moment().toString();
document.getElementById("todaysdate").innerHTML = a;
</script>
</body>
</html>
輸出
如上圖所示,還可以使用 moment-locale 檔案來處理不同的區域設定。現在,將該檔案新增到 script 標籤中,如下所示,並使用您選擇的不同區域設定。為此,您可以使用以下程式碼:
<script type="text/JavaScript" src="https://MomentJS.com/downloads/moment-with-locales.js"></script>
為了更好地理解,這裡給出一個 moment-locale 的可執行示例及其輸出:
<html>
<head>
<script type = "text/JavaScript" src ="https://MomentJS.com/downloads/moment-with-locales.js"></script>
</head>
<body>
<h1>Moment Locale</h1>
<div id = "datedisplay" style = "font-size:30px;"></div>
<script type = "text/JavaScript">
var a = moment.locale("fr");
var c = moment().format("LLLL");
document.getElementById("datedisplay").innerHTML = c;
</script>
</body>
</html>
輸出
方法 2:使用 Node.js
如果您選擇此方法,請確保您的系統上已安裝 Node.js 和 npm。您可以使用以下命令安裝 MomentJS:
npm install moment
成功安裝 MomentJS 後,您將看到以下輸出:
現在,要測試 MomentJS 是否可以在 Node.js 中正常工作,請建立檔案 test.js 並向其中新增以下程式碼:
var moment = require('moment');
var a = moment().toString();
console.log(a);
現在,在命令提示符中,執行命令 node test.js,如下面的螢幕截圖所示:
請注意,此命令將顯示 moment().toString() 的輸出。
方法 3:使用 Bower
Bower 是獲取 MomentJS 所需檔案的另一種方法。您可以使用以下命令使用 Bower 安裝 MomentJS:
bower install --save moment
下面的螢幕截圖顯示了使用 Bower 安裝 MomentJS:
這些是從 Bower 載入的用於安裝 MomentJS 的檔案。安裝的 moment 和 locale 檔案如下圖所示:
MomentJS - 簡介
本章將討論如何使用 MomentJS 和 RequireJS 以及 MomentJS 和 TypeScript。
MomentJS 和 RequireJS
為了瞭解使用 RequireJS 的 MomentJS 的工作方式,讓我們分析一個使用 MomentJS 和 RequireJS 的可執行示例。相應應用程式的資料夾結構如下圖所示:
您可以從 RequireJS 官方網站獲取 require.js 檔案: https://requirejs.org/docs/download.html 檢視以下程式碼以更好地理解:
示例 project.html
<!DOCTYPE html>
<html>
<head>
<title>RequireJS and MomentJS</title>
<!-- data-main attribute tells require.js to load
scripts/main.js after require.js loads. -->
<script data-main="scripts/main" src="scripts/require.js"></script>
</head>
<body>
<h1>RequireJS and MomentJS</h1>
<div id="datedisplay" style="font-size:25px;"></div>
</body>
</html>
main.js
require.config({
paths:{
'momentlocale':'libs/momentlocale',
},
});
require(['momentlocale'], function (moment) {
moment.locale('fr');
var a = moment().format("LLLL");
document.getElementById("datedisplay").innerHTML = a;
});
請注意,Moment.js 和 momentlocale.js 位於 libs 資料夾中。
以下是您將在瀏覽器中看到的 project.html 的輸出:
MomentJS 和 TypeScript
構建 MomentJS 和 TypeScript 專案的程式碼如下所示:
package.json
{
"name": "momenttypescript",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"browserify": "^16.2.0",
"gulp": "^3.9.1",
"gulp-connect": "^5.5.0",
"gulp-typescript": "^4.0.2",
"moment": "^2.22.1",
"tsify": "^4.0.0",
"typescript": "^2.8.3",
"vinyl-source-stream": "^2.0.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
請注意,package.json 中可用的依賴項需要使用 npm install 安裝。
main.ts
import * as moment from 'moment';
let now = moment().format('LLLL');
document.getElementById("datedisplay").innerHTML = now;
您需要使用 Gulp 將檔案從 TypeScript 構建到 JavaScript,也就是從 main.ts 到 main.js。以下程式碼顯示了用於構建檔案的 gulpfile.js。請注意,我們使用了 gulp-connect 包,它開啟一個本地伺服器來顯示輸出。
gulpfile.js
var gulp = require("gulp");
var connect = require("gulp-connect");
var browserify = require("browserify");
var tsify = require("tsify");
var source = require("vinyl-source-stream");
gulp.task("build", function (cb) {
runSequence("browserify", "minify", cb);
});
gulp.task("startserver", ["browserify", "connect"]);
gulp.task("browserify", function () {
var b = browserify({
insertGlobals: true,
debug: false
}) .add("src/main.ts") .plugin(tsify, { typescript: require("typescript") });
return b
.bundle()
.pipe(source("main.js"))
.pipe(gulp.dest("build/"));
});
gulp.task("connect", function () {
connect.server({
root: ".",
// port: '80',
livereload: true
});
});
這是執行上面程式碼時看到的輸出:
您可以看到如下所示的資料夾結構:
index.html 的程式碼如下所示:
<html>
<head></head>
<body>
<h1>MomentJS and typescript</h1>
<div id="datedisplay" style="font-size:30px;"></div>
<script src="build/main.js"></script>
</body>
</html>
現在,如果您開啟 https://:8080/,您將看到如下所示的輸出:
MomentJS - 解析日期和時間
MomentJS 有許多易於使用的函式,可以幫助解析日期和時間。它可以解析物件、字串、陣列、JavaScript 原生日期物件等形式的日期。本章將詳細討論它們。
解析日期
呼叫 moment() 時,MomentJS 會輸出包裝器物件。當您在瀏覽器中檢視控制檯輸出時,您可以看到以下內容。
MomentJS 提供多種解析日期的方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 | 現在
moment() |
| 2 | 字串
moment(string) |
| 3 | 物件
moment(object) |
| 4 | 日期
moment(Date) |
| 5 | 陣列
moment(Array[]) |
| 6 | Unix 時間戳
moment(number) |
| 7 | Moment 克隆
moment(Moment) |
| 8 | UTC
moment.utc() |
| 9 | parseZone
moment.parseZone() |
| 10 | 建立時間資料
moment().creationData(); |
| 11 | 預設值
var m = moment({hour: 3, minute: 40, seconds: 10}); |
MomentJS - 日期驗證
MomentJS 以簡單的方式處理日期驗證。您無需編寫大量程式碼來驗證日期。isValid() 是 moment 物件上提供的一個方法,用於判斷日期是否有效。MomentJS 還提供許多解析標誌,可用於檢查日期驗證。
解析標誌
在給定日期被認為無效的情況下,MomentJS 提供以下解析標誌:
overflow - 當給定的月份為 13 月、一年中的第 367 天或一個月中的第 32 天、非閏年的 2 月的第 29 天等時,將發生這種情況。overflow 包含與 invalidAt 匹配的無效單元的索引。請注意,-1 表示沒有溢位。
invalidMonth - 它顯示無效的月份名稱。它將給出無效的月份字串或 null。
Empty - 當給定的輸入不是日期時。它返回一個布林值。
nullInput - 空輸入,例如 moment(null); 它返回一個布林值。
invalidFormat - 當給定的格式為空時,例如 moment('2018-04-25', [])。它返回布林值。
userInvalidated - 明確建立為無效的日期,例如 moment.invalid()。它返回布林值。
meridiem - 指示解析的子午線 (AM/PM),如果存在。它返回字串。
parsedDateParts - 它返回一個已解析的日期部分陣列,例如 parsedDateParts[0] 為年份、parsedDateParts[1] 為月份,parsedDateParts[2] 為日期。如果不存在任何部分,但子午線有值,則日期無效。它返回一個數組。
請考慮以下示例以瞭解日期驗證:
var a = moment("2018-18-10T10:20:25");
a.isValid();
a.invalidAt();
輸出
invalidAt 的輸出為 1,它指向月份,因為月份值大於 12 並且溢位。如果發生溢位,invalidAt 將給出如下表所示的輸出:
| 0 | 年份 |
| 1 | 月份 |
| 2 | 日期 |
| 3 | 小時 |
| 4 | 分鐘 |
| 5 | 秒 |
| 6 | 毫秒 |
如果給定的日期中有多個溢位,它將是第一個溢位索引的輸出。
MomentJS - Getter/Setter
MomentJS 有許多方法可以獲取/設定日期輸入。Get 允許我們讀取所需的輸入單位,而 Set 允許修改輸入單位。本章將詳細討論 moment 物件上使用的 get/set 方法。
下表顯示了可用的 get/set 方法:
| 方法 | 語法 |
|---|---|
| 毫秒 |
moment().millisecond(Number) moment().millisecond(); moment().milliseconds(Number); moment().milliseconds(); |
| 秒 |
moment().second(數字); moment().second(); moment().seconds(數字); moment().seconds(); |
| 分鐘 |
moment().minute(數字); moment().minute(); moment().minutes(數字); moment().minutes(); |
| 小時 |
moment().date(數字); moment().date(); moment().dates(數字); moment().dates(); |
| 星期幾 |
moment().day(數字|字串); moment().day(); moment().days(數字|字串); moment().days(); |
| 月份日期 |
moment().date(數字); moment().date(); moment().dates(數字); moment().dates(); |
| 一年中的第幾天 |
moment().dayOfYear(數字); moment().dayOfYear(); |
| 一年中的第幾周 |
moment().week(數字); moment().week(); moment().weeks(數字); moment().weeks(); |
| 一年中的第幾周 (ISO) |
moment().isoWeek(數字); moment().isoWeek(); moment().isoWeeks(數字); moment().isoWeeks(); |
| 月份 |
moment().month(數字|字串); moment().month(); |
| 季度 |
moment().quarter(); moment().quarter(數字); moment().quarters(); moment().quarters(數字); |
| 年份 |
moment().year(數字); moment().year(); |
| 週數年份 |
moment().weekYear(數字); moment().weekYear(); |
| 一年中的週數 |
moment().weeksInYear(); |
| 獲取 |
moment().get('year'); moment().get('month'); moment().get('date'); moment().get('hour'); moment().get('minute'); moment().get('second'); moment().get('millisecond'); |
| 設定 |
moment().set(字串, 整數); moment().set(物件(字串, 整數)); |
| 最大值 |
moment.max(Moment[,Moment...]); moment.max(Moment[]); |
| 最小值 |
moment.min(Moment[,Moment...]); moment.min(Moment[]); |
MomentJS - 操作日期和時間
MomentJS 提供各種方法來操作 moment 物件上的日期和時間。本章將詳細介紹所有這些方法。
操作日期和時間的方法
下表顯示了 MomentJS 中可用的方法,這些方法有助於根據需要操作日期和時間:
| 序號 | 方法及語法 |
|---|---|
| 1 | 新增
moment.add() |
| 2 | 減去
moment.subtract() |
| 3 | 時間開始
moment.startof() |
| 4 | 時間結束
moment.endof() |
| 5 | 本地時間
moment.local() |
| 6 | UTC
moment.utc() |
| 7 | UTC 偏移量
moment.utcOffset() |
MomentJS - 格式化日期和時間
MomentJS 提供各種格式來以不同的方式顯示日期。有一些方法可以從給定的時刻、當前時刻以及兩個時刻之間的差異來顯示時間等。它可以以 JSON 格式、陣列、物件、字串等顯示日期。
格式化日期和時間的方法
下表顯示了有助於根據需要顯示/格式化日期的方法列表。
| 方法 | 語法 |
|---|---|
| 格式化 |
moment().format(); moment().format(字串); |
| 距現在的時間 |
moment().fromNow(); moment().fromNow(布林值); |
| 距X的時間 |
moment().from (Moment|字串|數字|日期|陣列); |
| 距現在的時間 |
moment().toNow(); moment().toNow(布林值); |
| 距X的時間 |
moment().to(Moment|字串|數字|日期|陣列); moment().to(Moment|字串|數字|日期|陣列, 布林值); |
| 日曆時間 |
moment().calendar(); moment().calendar(參考時間); moment().calendar(參考時間, 格式); |
| 差異 |
moment().diff(Moment|字串|數字|日期|陣列); moment().diff(Moment|字串|數字|日期|陣列, 字串); moment().diff(Moment|字串|數字|日期|陣列, 字串, 布林值); |
| Unix 時間戳(毫秒) |
moment().valueOf(); +moment(); |
| Unix 時間戳(秒) |
moment().unix(); |
| 月份的天數 |
moment().daysInMonth(); |
| 作為 JavaScript 日期 |
moment().toDate(); |
| 作為陣列 |
moment().toArray(); |
| 作為 JSON |
moment().toJSON(); |
| 作為 ISO 8601 字串 |
moment().toISOString(); moment().toISOString(keepOffset); |
| 作為物件 |
moment().toObject(); |
| 作為字串 |
moment().toString(); |
| 檢查 |
moment().inspect(); |
MomentJS - 日期查詢
MomentJS 提供了查詢日期/時間是否為閏年、日期比較、日期驗證等的方法。本章將詳細討論它們。
MomentJS 中查詢日期的方法
下表顯示了 MomentJS 中可用的方法及其查詢日期的語法:
| 方法 | 語法 |
|---|---|
| 是否早於 |
moment().isBefore(Moment|字串|數字|日期|陣列); moment().isBefore(Moment|字串|數字|日期|陣列, 字串); |
| 是否相同 |
moment().isSame(Moment|字串|數字|日期|陣列); moment().isSame(Moment|字串|數字|日期|陣列, 字串); |
| 是否晚於 |
moment().isAfter(Moment|字串|數字|日期|陣列); moment().isAfter(Moment|字串|數字|日期|陣列, 字串); |
| 是否相同或早於 |
moment().isSameOrBefore(Moment|字串|數字|日期|陣列); moment().isSameOrBefore(Moment|字串|數字|日期|陣列, 字串); |
| 是否相同或晚於 |
moment().isSameOrAfter(Moment|字串|數字|日期|陣列); moment().isSameOrAfter(Moment|字串|數字|日期|陣列, 字串); |
| 是否介於之間 |
moment().isBetween(類似 moment 的物件, 類似 moment 的物件); moment().isBetween(類似 moment 的物件, 類似 moment 的物件, 字串); |
| 是否為夏令時 |
moment().isDST(); |
| 是否為閏年 |
moment().isLeapYear(); |
| 是否為 Moment 物件 |
moment.isMoment(obj); |
| 是否為日期物件 |
moment.isDate(obj); |
MomentJS - 國際化
國際化是 MomentJS 中的重要功能之一。您可以根據本地化顯示日期和時間,換句話說,根據國家/地區顯示。如果需要,可以將語言環境應用於特定時刻。
本章將詳細討論如何全域性應用語言環境、區域性應用語言環境、使用 Node.js 和瀏覽器處理語言環境、獲取所需語言環境中的單位(月份、星期幾等)等。
| 序號 | 語言環境和描述 |
|---|---|
| 1 | 全域性語言環境
我們可以全域性分配語言環境,所有日期/時間詳細資訊都將在分配的語言環境中可用。 |
| 2 | 區域性更改語言環境
如果我們需要在一個應用程式中處理多個語言環境,則需要區域性應用語言環境。 |
| 3 | 在瀏覽器中使用語言環境
我們可以透過在 script 標籤中包含語言環境檔案來開始使用語言環境。 |
| 4 | 使用 Node.js 使用語言環境
如果您碰巧使用 Node.js,則在執行 npm install moment 時,moment 中將已經有語言環境檔案。 |
| 5 | momentjs_列出當前語言環境的日期/時間詳細資訊
您可以設定語言環境並檢查月份、星期幾等詳細資訊。 |
| 6 | 檢查當前語言環境
我們可以使用 moment.locale() 檢查當前語言環境。 |
| 7 | 訪問特定於語言環境的功能
這裡我們將看到當前載入的語言環境中可用的方法和屬性。 |
MomentJS - 自定義
MomentJS 允許對建立的語言環境進行自定義。本章將詳細討論它們。
以下列表顯示了本地化可能的自定義項:
| 序號 | 本地化和描述 |
|---|---|
| 1 | 月份名稱
您可以將月份名稱新增到語言環境自定義中。 |
| 2 | 月份縮寫
此方法有助於自定義月份縮寫。 |
| 3 | 星期名稱
此方法有助於根據語言環境自定義星期名稱。 |
| 4 | 星期縮寫
此方法有助於根據設定的語言環境自定義星期縮寫。 |
| 5 | 最小星期縮寫
此方法有助於根據設定的語言環境自定義最小星期縮寫。 |
| 6 | 長日期格式
此方法有助於為語言環境自定義長日期格式。 |
| 7 | 相對時間
此方法有助於獲取相對時間。 |
| 8 | 上午/下午
此方法有助於根據語言環境自定義子午線。 |
| 9 | 上午/下午解析
您可以使用此方法解析上午/下午。 |
| 10 | 日曆
這有助於為設定的語言環境自定義日曆物件。 |
| 11 | 序數
日期的序數顯示可以根據語言環境更改。 |
| 12 | 相對時間閾值
這與 duration.humanize 一起使用,其中持續時間的長度顯示為 **幾秒鐘前、一分鐘內、一小時前** 等。 |
MomentJS - 時長
MomentJS 提供了一個重要的功能,稱為持續時間,它處理給定單位的時間長度。在本章中,您將詳細瞭解這一點。
持續時間可用的方法
下表顯示了持續時間中可用的方法,這些方法用於 moment 持續時間的不同單位:
| 方法 | 語法 |
|---|---|
| 建立 |
moment.duration(數字, 字串); moment.duration(數字); moment.duration(物件); moment.duration(字串); |
| 克隆 |
moment.duration().clone(); |
| 人性化 |
moment.duration().humanize(); |
| 毫秒 |
moment.duration().milliseconds(); moment.duration().asMilliseconds(); |
| 秒 |
moment.duration().seconds(); moment.duration().asSeconds(); |
| 分鐘 |
moment.duration().minutes(); moment.duration().asMinutes(); |
| 小時 |
moment.duration().hours(); moment.duration().asHours(); |
| 天 |
moment.duration().days(); moment.duration().asDays(); |
| 周 |
moment.duration().weeks(); moment.duration().asWeeks(); |
| 月 |
moment.duration().months(); moment.duration().asMonths(); |
| 年 | moment.duration().years(); moment.duration().asYears(); |
| 新增時間 |
moment.duration().add(數字, 字串); moment.duration().add(數字); moment.duration().add(持續時間); moment.duration().add(物件); |
| 減去時間 |
moment.duration().subtract(數字, 字串); moment.duration().subtract(數字); moment.duration().subtract(持續時間); moment.duration().subtract(物件); |
| 將持續時間與 Diff 一起使用 |
var duration = moment.duration(x.diff(y)) |
| 作為時間單位 |
moment.duration().as(字串); |
| 獲取時間單位 |
duration.get('hours'); duration.get('minutes'); duration.get('seconds'); duration.get('milliseconds'); |
| 作為 JSON |
moment.duration().toJSON(); |
| 是否為持續時間 |
moment.isDuration(obj); |
| 作為 ISO 8601 字串 |
moment.duration().toISOString(); |
| 語言環境 |
moment.duration().locale(); moment.duration().locale(字串); |
MomentJS - 工具函式
在 MomentJS 中,您可以使用規範化單元和無效方法根據需要更改或自定義輸出。您還可以對 moment 物件設定您自己的自定義驗證。
請查看下錶以瞭解更多資訊:
MomentJS - 外掛
外掛是在 MomentJS 上新增的擴充套件功能。MomentJS 是一個開源專案,在 MomentJS 中可以找到許多外掛,這些外掛是由其使用者貢獻的,並且可以使用 Node.js 和 GitHub 獲得。
本章將討論 MomentJS 中提供的一些日曆外掛和日期格式外掛。
日曆外掛
本節將討論兩種型別的日曆外掛:**ISO 日曆和臺灣日歷**。
ISO 日曆
您可以使用以下命令使用 Node.js 安裝它:
npm install moment-isocalendar
您可以從 GitHub 獲取 moment-isocalendar.js - https://github.com/fusionbox/moment-isocalendar 請觀察以下使用 isocalendar 和 MomentJS 的工作示例:
示例
var m = moment().isocalendar();
輸出
示例
var m = moment.fromIsocalendar([2018, 51, 10, 670]).format('LLLL');
輸出
臺灣日歷
您可以使用以下命令使用 Node.js 安裝它:
npm install moment-jalaali
您可以從 GitHub 獲取 moment-taiwan.js - https://github.com/bradwoo8621/moment-taiwan 請觀察以下使用 isocalendar 和 MomentJS 的工作示例:
示例
var m = moment('190/01/01', 'tYY/MM/DD');
var c = m.twYear();
輸出
日期格式外掛
本節將討論以下型別的日期格式外掛:
- Java 日期格式解析器
- 短日期格式化程式
- 解析日期格式
- 持續時間格式
- 日期範圍
- 精確範圍
Java 日期格式解析器
您可以使用以下命令使用 Node.js 安裝它:
您可以從 GitHub 獲取 moment-jdateformatparser.js - https://github.com/MadMG/moment-jdateformatparser 請觀察以下 moment-jdateformatparser 和 MomentJS 的工作示例:
示例
var m = moment().formatWithJDF("dd.MM.yyyy");
輸出
短日期格式化程式
可以從 GitHub 獲取 shortdateformat 的 JavaScript 檔案:
https://github.com/researchgate/moment-shortformat語法
moment().short();
顯示如下表所示:
| 來自 moment | 來自 moment().short() |
|---|---|
| 0 到 59 秒 | 0 到 59 秒 |
| 1 到 59 分鐘 | 1 到 59 分 |
| 1 到 23 小時 | 1 小時到 23 小時 |
| 1 到 6 天 | 1 天到 6 天 |
| ≥ 7 天且同年 | 顯示將類似於 2 月 3 日、3 月 6 日 |
| ≥ 7 天且不同年 | 顯示將類似於 2018 年 2 月 3 日、2018 年 3 月 6 日 |
您可以從上面給出的 GitHub 連結獲取 momentshort 指令碼。
示例
var a = moment().subtract(8, 'hours').short(); var b = moment().add(1, 'hour').short(true);
輸出
如果您想刪除字尾 **ago** 或 **in**,可以將 true 傳遞給 short(tru。
解析日期格式
您可以使用以下命令使用 Node.js 安裝它:
npm install moment-parseformat
示例
var a = moment.parseFormat('Friday 2018 27 april 10:28:10');
輸出
請注意,輸出顯示無論將哪些引數(日期/時間)傳遞給 parseFormat,它都會顯示如上所示的日期格式。
持續時間格式
您可以使用以下命令在 Node.js 上安裝持續時間格式:
持續時間格式的程式碼庫在此處可用:https://github.com/jsmreese/moment-duration-format 讓我們來看一個使用持續時間格式的實際例子:
示例
var a = moment.duration(969, "minutes").format("h:mm:ss");
輸出
這為 moment 建立的持續時間添加了更多細節。
日期範圍
您可以使用以下命令在 Node.js 上安裝日期範圍:
npm install moment-range
示例
window['moment-range'].extendMoment(moment); var start = new Date(2012, 0, 15); var end = new Date(2012, 4, 23); var range = moment.range(start, end); console.log(range.start._d); console.log(range.end._d);
輸出
精確範圍
精確範圍將以日期、時間和人類可讀的格式顯示確切的日期差。您可以使用以下命令在 Node.js 上安裝精確範圍:
npm install moment-precise-range-plugin
示例
var a = moment("1998-01-01 09:00:00").preciseDiff("2011-03-04 18:05:06");
輸出
MomentJS - 示例
到目前為止,我們已經學習了 MomentJS 中的許多概念。本章將提供更多示例,以幫助您更好地理解。
顯示兩個日期之間的日期範圍
這是一個顯示兩個給定日期之間日期的示例。
<!DOCTYPE html>
<html>
<head>
<script type="text/JavaScript" src="MomentJS.js"></script>
<style>
table, td {
border: 1px solid #F1E8E8;
border-collapse: collapse;
padding: 4px;
}
table tr:nth-child(odd) {
background-color: #CFCACA;
}
table tr:nth-child(even) {
background-color: #C4B4B4;
}
</style>
</head>
<body>
<h1>Dates display between 2014-05-01 and 2014-05-16</h1>
<div id="container">
<table id="datedetails" ></table>
</div>
<script type="text/JavaScript">
function getDaterange(start, end, arr) {
if (!moment(start).isSameOrAfter(end)) {
if (arr.length==0) arr.push(moment(start).format("dddd, MMMM Do YYYY, h:mm:ss a"));
var next = moment(start).add(1, 'd');
arr.push(next.format("dddd, MMMM Do YYYY, h:mm:ss a"));
getDaterange(next, end, arr);
} else {
return arr;
}
return arr;
}
var a = getDaterange("2014-05-01", "2014-05-16", []);
var tr = "";
for (var i = 0; i<a.length;i++ ) {
tr += "<tr><td>"+a[i]+"</td></tr>";
}
document.getElementById("datedetails").innerHTML = tr;
</script>
</body>
</html>
我們想顯示從 **2014-05-01** 到 **2014-05-16** 之間的全部日期。我們使用了日期查詢 **isSameOrAfter、日期加法和日期格式** 來實現我們的目標。
輸出
顯示 2014-05-01 和 2014-08-16 之間的星期日
<!DOCTYPE html>
<html>
<head>
<script type="text/JavaScript" src="MomentJS.js"></script>
<style>
table, td {
border: 1px solid #F1E8E8;
border-collapse: collapse;
padding: 4px;
}
table tr:nth-child(odd) {
background-color: #CFCACA;
}
table tr:nth-child(even) {
background-color: #C4B4B4;
}
</style>
</head>
<body>
<h1>Sundays between 2014-05-01 and 2014-08-16</h1>
<div id="container">
<table id="datedetails"></table>
</div>
<script type="text/JavaScript">
function getDaterange(start, end, arr) {
if (!moment(start).isSameOrAfter(end)) {
if (arr.length==0) {
if (moment(start).format("dddd") === "Sunday") {
arr.push(moment(start).format("dddd, MMMM Do YYYY, h:mm:ss a"));
}
}
var next = moment(start).add(1, 'd');
if (moment(next).format("dddd") === "Sunday") {
arr.push(next.format("dddd, MMMM Do YYYY, h:mm:ss a"));
}
getDaterange(next, end, arr);
} else {
return arr;
}
return arr;
}
var a = getDaterange("2014-05-01", "2014-08-16", []);
var tr = "";
for (var i = 0; i<a.length;i++ ) {
tr += "<tr><td>"+a[i]+"</td></tr>";
}
document.getElementById("datedetails").innerHTML = tr;
</script>
</body>
</html>
輸出
根據區域設定顯示日期詳細資訊
這裡我們使用 moment.locale 指令碼,其中包含所有區域設定。
<!DOCTYPE html>
<html>
<head>
<script type="text/JavaScript" src="MomentJS.js"></script>
<script type="text/JavaScript" src="momentlocale.js" charset="UTF-8"></script>
<style type="text/css">
div {
margin-top: 16px!important;
margin-bottom: 16px!important;
width:100%;
}
table, td {
border: 1px solid #F1E8E8;
border-collapse: collapse;
padding: 4px;
}
table tr:nth-child(odd) {
background-color: #CFCACA;
}
table tr:nth-child(even) {
background-color: #C4B4B4;
}
</style>
</head>
<body>
<div >
Select Locale : <select id="locale" onchange="updatelocale()" style="width:200px;">
<option value="en">English</option>
<option value="fr">French</option>
<option value="fr-ca">French Canada</option>
<option value="cs">Czech</option>
<option value="zh-cn">Chinese</option>
<option value="nl">Dutch< /option>
<option value="ka">Georgian</option>
<option value="he">Hebrew</option>
<option value="hi">Hindi</option>
<option value="id">Indonesian</option>
<option value="it">Italian</option>
<option value="jv";Japanese</option>
<option value="ko";Korean</option>
</select>
</div>
<br/>
<br/>>
Display Date is different formats as per locale :<span id="localeid"></span><br/>
<div>
<table>
<tr>
<th>Format</th>
<th>Display</th>
</tr>
<tr>
<td><i>dddd, MMMM Do YYYY, h:mm:ss a</i></td>
<td>
<div id="ldate"></div>
</td>
</tr>
<tr>
<td><i>LLLL</i></td>
<td>
<div id="ldate1"></div>
</td>
</tr>
<tr>
<td><i>moment().format()</i></td>
<td>
<div id="ldate2"></div>
</td>
</tr>
<tr>
<td><i>moment().calendar()</i></td>
<td>
<div id="ldate3"></div>
</td>
</tr>
<tr>
<td><i>Months</i></td>
<td>
<div id="ldate4"></div>
</td>
</tr>
<tr>
<td><i>Weekdays</i></td>
<td>
<div id="ldate5"></div>
</td>
</tr>
</table>
</div>
<script type="text/JavaScript">
var updatelocale = function() {
var a = moment.locale(document.getElementById("locale").value);
var k = moment().format("dddd, MMMM Do YYYY, h:mm:ss a");
var k1 = moment().format("LLLL");
var k2 = moment().format();
var k3 = moment().calendar();
var k4 = moment.months();
var k5 = moment.weekdays();
document.getElementById("localeid").innerHTML = "<b>"+a+"</b>";
document.getElementById("ldate").innerHTML = k;
document.getElementById("ldate1").innerHTML = k1;
document.getElementById("ldate2").innerHTML = k2;
document.getElementById("ldate3").innerHTML = k3;
document.getElementById("ldate4").innerHTML = k4;
document.getElementById("ldate5").innerHTML = k5;
};
updatelocale();
</script>
</body>
</html>
輸出 1
輸出 2
輸出 3
輸出 4