moment("12-25-1995", "MM-DD-YYYY"); //返回一個moment對象,第二個字符串格式
常見用法
moment("3-2014", "Q-YYYY"); //Q指的是季度
moment("3-2014", "x"); //小寫x是毫秒級,大寫x是秒級
moment("125-2014", "DDD-YYYY"); //DDD是一年中的第幾天
如果設置的時間為非法時間,使用isValid()方法驗證,將返回false
moment('2010 11 31').isValid(); //false
你可以使用表示時間單位的對象來創建Moment,如下:
moment({ years:2010, months:3, date:5, hours:15, minutes:10, seconds:3, milliseconds:123});
moment({ y :2010, M :3, d :5, h :15, m :10, s :3, ms :123});//縮寫
使用Unix 偏移量(毫秒)進行初始化
moment(number) 例:moment(1567851564654)
使用Unix 時間戳(秒)進行初始化
moment.unix(number) 例: moment.unix(86453456445654)
Moment對象復制
隱式調用moment()方法進行復制
var a = moment([2012]);
var b = moment(a);
顯示利用moment.clone()方法進行復制
var a = moment([2012]);
var b = a.clone();
------------------------------------------------------
GET/SET
Moment.js使用了重載的getter和setters,你可能在jQuery上見過這種方式。在不指定參數時調用這些方法是一個getter,
指定參數時調用這些方法是一個setters
moment().seconds(30) === new Date().setSeconds(30);
moment().seconds() === new Date().getSeconds();
utc下的映射關系
moment.utc().seconds(30) === new Date().setUTCSeconds(30);
moment.utc().seconds() === new Date().getUTCSeconds();
秒的設置與取值,其它類似:
moment().second(Number);
moment().second(); // Number
有效輸入值為 0〜59,超出后將影響相應的分。
取值(Get)
moment().get('year');
moment().get('month'); // 0 to 11
moment().get('date');
moment().get('millisecond'); //0 to 999
賦值(Set)
moment().set(String, Int);
moment().set(Object(String, Int));
moment().set('year', 2013);
moment().set('month', 3); // 四月
moment().set('date', 1);
moment().set('millisecond', 123);
moment().set({'year': 2013, 'month': 3});
moment.max(Moment[,Moment...]) 返回其中的最大值,同理最小值moment.min(Moment[,Moment...])
var a = moment().subtract(1, 'day');
var b = moment().add(1, 'day');
moment.max(a, b); // b
------------------------------------------------
日期時間的加減等操作
Moment使用了連續接口模式,也叫做方法鏈。這讓你可以像這樣像下面這樣進行方法調用:
moment().add(7, 'days').subtract(1, 'months').year(2009).hours(0).minutes(0).seconds(0);
加法(Add)
moment().add(Number, String);例:moment().add(7, 'days');后面的描述單位的可以縮寫
對一個時間增加多個時間單位時,可以通過方法鏈,也可以通過一個對象實現:
moment().add(7, 'days').add(1, 'months'); // 方法鏈實現
moment().add({days:7,months:1}); // 對象字面量實現
減法(Subtract)
moment().subtract(Number, String);例:moment().subtract(7, 'days');后面的描述單位的可以縮寫
開始時間 (Start of Time) 對原moment設置為某一時間的單位的起始時間。
moment().startOf(String);
moment().startOf('year'); // 設置為今年1月第一天的 12:00 am
moment().startOf('month'); // 設置為本月第一天的 12:00 am
moment().startOf('quarter'); // 設置為本季度第一個月第一天的 12:00 am
moment().startOf('week'); // 設置為本周第一天的 12:00 am
moment().startOf('isoWeek'); // 設置為ISO本周的第一天的 12:00 am
moment().startOf('day'); // 設置為今天的 12:00
結束時間 (End of Time)類似於開始時間
moment().endOf(String);
moment().endOf("year"); // 設置為今年的 12-31 11:59:59.999 pm
本地化(Local)
moment().local();對原moment時間設置一個標志,對其內部使用Date#get*和Date#set*代替Date#getUTC*和Date#setUTC*
var a = moment.utc([2011, 0, 1, 8]);
a.hours(); // 8 UTC
a.local();
a.hours(); // 0 PST
UTC 與本地化相反
moment().utc();
對原moment時間設置一個標志,對其內部使用Date#getUTC*和Date#setUTC*代替Date#get*和Date#set*
UTC 偏移量(UTC Offset)
moment().utcOffset(); //設置或獲取一個以分為單位的UTC偏移量。注意是以分為單位
moment().utcOffset(Number|String);
獲取當前對象的UTC偏移量:
moment().utcOffset(); // (-240, -120, -60, 0, 60, 120, 240, etc.)
當輸入小於16且小於-16時,moment會理解為輸入的是小時
moment().utcOffset(8); // 設置小時偏移量
moment().utcOffset(480); // 設置分鍾偏移量 (8 * 60)
客戶端與服務器不在同一時區
一般遇到時區問題,要考慮清楚,統計當天數據或者判斷在當天內等情況時, 需要先進行偏移,注意時區偏移取 偏移量的相反數,比如東八區是(-8),utcoffset里面就是(-(-8)),
再進行startOf('day') 例:moment(new Date()).utcoffset(8).startOf()
時區偏移量(Timezone Offset),應該是與UTC偏移量相反,(UTC偏移量是指相對於UTC時間,時區偏移量是指相對於本地)
設置或獲取一個以分鍾為單位的時區偏移量。 注意是以分為單位
moment().zone();
moment().zone(Number|String);
-----------------------------------------------------------
日期時間的格式化
格式化(Format)
moment().format();
moment().format(String);
例:
moment().format(); // "2014-09-08T08:02:17-05:00" (ISO 8601)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("x"); //1360013296123
moment().format('YYYY MM DD'); // "Invalid date"
時差 (之前,相對於當前時間)
moment([2007, 0, 29]).fromNow(); // 10年前
如果設置為true,會得到一個不含后綴的值:
moment([2007, 0, 29]).fromNow(); // 10年前
moment([2007, 0, 29]).fromNow(true); // 10年
時差 (之前)
如果你想顯示一個moment時間與另一個的關系,可以使用moment().from()方法:
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b) // "a day ago"-1天前
與moment().from()一樣,也可以設置第二個參數為true,然后得到一個不含后綴的值。這在顯示兩個時間之間的時差時,非常有用:
var start = moment([2007, 0, 5]);
var end = moment([2007, 0, 10]);
end.from(start); // "in 5 days"
end.from(start, true); // "5 days"
時差(之后) moment('').toNow() 與 moment('').fromNow相反
時差 (毫秒) 獲取一個毫秒級的時差,moment().diff()方法類似於moment().from()方法。
moment().diff(Moment|String|Number|Date|Array);
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b) // 86400000
Unix 偏移量 (毫秒) moment().valueOf()會簡單的輸出一個毫秒級的Unix時間偏移量,類似於Date.valueOf()。
moment().valueOf();
moment().valueOf(); // 1318874398806
Unix 時間戳 (秒) moment().unix()會返回一個Unix時間戳
moment().unix();
moment(1318874398806).unix(); // 1318874398 注意單位是秒
日期裝換:天數,Date對象,數組,對象
天數 (月)
moment().daysInMonth(); 獲取當前月的天數。
moment("2012-02", "YYYY-MM").daysInMonth() // 29
moment("2012-01", "YYYY-MM").daysInMonth() // 31
JavaScript Date對象
moment().toDate(); 通過Moment.js獲取一個JavaScript Date對象,使用moment().toDate()方法
將要返回的Date是moment正在使用的對象,所以任何對Date的修改也會導致moment改變。如果你只想獲取一個Date副本,
應該在調用moment().toDate()方法前使用moment().clone()方法。
數組
moment().toArray(); 返回一個數組,返回值是new Date()參數的鏡像。
moment().toArray(); // [2013, 1, 4, 14, 40, 16, 154];[年,月,日,時,分,秒,毫秒]
對象
moment().toObject(); 返回一個包括:年、月、日、時、分、秒、毫秒的對象
moment().toObject() // {
// years: 2015
// months: 6
// date: 26,
// hours: 1,
// minutes: 53,
// seconds: 14,
// milliseconds: 600
// }
----------------------------------------------------------------
日期時間的查詢
1. 是否之前:isBefore()
moment().isBefore(Moment|String|Number|Date|Array); 檢查moment是否在另一個時間之前。
例:moment('2010-10-20').isBefore('2010-10-21'); // true
如果你想將比較粒度限制為毫秒以外的單位,可以在第二個參數設置要比較的單位。
當設置了第二個參數后,不僅僅會比較這一個級別的單位,當以天為單位比較時,同時會比較年、月、日。
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true
支持year month week day hour minute second,不支持milliseconds
2. 是否相同:isSame() 有時候很實用
moment().isSame(Moment|String|Number|Date|Array); 檢查moment是否和另一個時間相同。
例:moment('2010-10-20').isSame('2010-10-20'); // true
如果你想將比較粒度限制為毫秒以外的單位,可以在第二個參數設置要比較的單位。可以用來比較是否在同一年,同一個月,或者同一天等等
moment('2010-10-20').isSame('2009-12-31', 'year'); // false
moment('2010-10-20').isSame('2010-01-01', 'year'); // true
moment('2010-10-20').isSame('2010-12-31', 'year'); // true
moment('2010-10-20').isSame('2011-01-01', 'day'); // false
當設置了第二個參數后,不僅僅會比較這一個級別的單位。輸入低級別的單位后,也同時會比較其上級單位,
如:當以天為單位比較時,同時會比較年、月、日。
moment('2010-01-01').isSame('2011-01-01', 'month'); // false, 年不同
moment('2010-01-01').isSame('2010-02-01', 'day'); // false, 月不同
3. 是否之后:isAfter() 跟isBefore()相反
4. 是否之間:isBetween()
moment().isBetween(moment-like, moment-like); 檢查moment是否在另外兩個時間之間,可選比較單位可以是:分、小時、天等。
檢查moment是否在另外兩個時間之間,可選比較單位可以是:分、小時、天等。
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true
如果你想將比較粒度限制為毫秒以外的單位,可以在第三個參數設置要比較的單位。
moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year'); // false
moment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year'); // true
5. 是否閏年:isLeapYear() moment().isLeapYear()在是閏年是返回true,否則返回false。
6.是否Moment對象:isMoment() moment.isMoment()方法用於檢查,是否是一個moment對象。
7.是否Date對象:isDate() moment.isDate()方法用於檢查,是否是一個JavaScript Date對象。
-----------------------------------------------------
時間段(Durations)
1. 創建時間段:duration()
moment.duration(Number, String);
moment.duration(Number);
moment.duration(Object);
moment.duration(String);
創建一個時間段,通過moment.duration()方法並傳入一個毫秒級的時間戳。
moment.duration(100); // 100 毫秒
如果你想在創建時間段時使用非毫秒級的單位,你可以像這樣傳入時間單位: 可以使用簡寫
moment.duration(2, 'seconds');
moment.duration(2, 'minutes');
moment.duration(2, 'hours');
像moment#add一樣,你可以按需要傳入一個包含多個單位的對象。
moment.duration({
seconds: 2,
minutes: 2,
hours: 2,
days: 2,
weeks: 2,
months: 2,
years: 2
});
最后還可以傳入一個字符串創建時間段
moment.duration('23:59:59'); 秒的部分還支持這樣23:59:59.999
2. 增加時間:add() 對原時間段增加時間。
moment.duration().add(Number, String);
moment.duration().add(Number);
moment.duration().add(Duration);
moment.duration().add(Object);
在創建時間段時使用的簡寫形式的時間單位,在這里也同樣適用。可以第二個參數中傳入。
var a = moment.duration(1, 'd');
var b = moment.duration(2, 'd');
a.add(b).days(); // 3
3.是否時間段:isDuration()
moment.isDuration(obj); 檢查是否是一個有效的時間段對象,使用moment.isDuration()
moment.isDuration() // false
moment.isDuration(new Date()) // false
moment.isDuration(moment()) // false
moment.isDuration(moment.duration()) // true
moment.isDuration(moment.duration(2, 'minutes')) // true
