国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 時(shí)間與日期處理實(shí)戰(zhàn):你肯定被坑過

ninefive / 1301人閱讀

摘要:本文時(shí)間與日期處理實(shí)戰(zhàn)你肯定被坑過從屬于筆者的前端入門與最佳實(shí)踐中入門與最佳實(shí)踐系列文章。然而由于地球的不規(guī)則自轉(zhuǎn),導(dǎo)致時(shí)間有誤差,因此目前已不被當(dāng)作標(biāo)準(zhǔn)時(shí)間使用。而在航空上,所有使用的時(shí)間劃一規(guī)定是協(xié)調(diào)世界時(shí)。

本部分的知識(shí)圖譜請(qǐng)參考編程語言知識(shí)圖譜-時(shí)間與日期。

本文JavaScript 時(shí)間與日期處理實(shí)戰(zhàn):你肯定被坑過從屬于筆者的Web 前端入門與最佳實(shí)踐中 JavaScript 入門與最佳實(shí)踐系列文章。

JavaScript DateTime 標(biāo)準(zhǔn)時(shí)間

GMT即「格林威治標(biāo)準(zhǔn)時(shí)間」(Greenwich Mean Time,簡稱G.M.T.),指位于英國倫敦郊區(qū)的皇家格林威治天文臺(tái)的標(biāo)準(zhǔn)時(shí)間,因?yàn)楸境踝游缇€被定義為通過那里的經(jīng)線。然而由于地球的不規(guī)則自轉(zhuǎn),導(dǎo)致GMT時(shí)間有誤差,因此目前已不被當(dāng)作標(biāo)準(zhǔn)時(shí)間使用。UTC是最主要的世界時(shí)間標(biāo)準(zhǔn),是經(jīng)過平均太陽時(shí)(以格林威治時(shí)間GMT為準(zhǔn))、地軸運(yùn)動(dòng)修正后的新時(shí)標(biāo)以及以「秒」為單位的國際原子時(shí)所綜合精算而成的時(shí)間。UTC比GMT來得更加精準(zhǔn)。其誤差值必須保持在0.9秒以內(nèi),若大于0.9秒則由位于巴黎的國際地球自轉(zhuǎn)事務(wù)中央局發(fā)布閏秒,使UTC與地球自轉(zhuǎn)周期一致。不過日常使用中,GMT與UTC的功能與精確度是沒有差別的。協(xié)調(diào)世界時(shí)區(qū)會(huì)使用“Z”來表示。而在航空上,所有使用的時(shí)間劃一規(guī)定是協(xié)調(diào)世界時(shí)。而且Z在無線電中應(yīng)讀作“Zulu”(可參見北約音標(biāo)字母),協(xié)調(diào)世界時(shí)也會(huì)被稱為“Zulu time”。

TimeZone&UTC Offsets:時(shí)區(qū)與偏移

人們經(jīng)常會(huì)把時(shí)區(qū)與UTC偏移量搞混,UTC偏移量代表了某個(gè)具體的時(shí)間值與UTC時(shí)間之間的差異,通常用HH:mm形式表述。而TimeZone則表示某個(gè)地理區(qū)域,某個(gè)TimeZone中往往會(huì)包含多個(gè)偏移量,而多個(gè)時(shí)區(qū)可能在一年的某些時(shí)間有相同的偏移量。譬如America/Chicago, America/Denver, 以及 America/Belize在一年中不同的時(shí)間都會(huì)包含 -06:00 這個(gè)偏移。

時(shí)間戳

Unix時(shí)間戳表示當(dāng)前時(shí)間到1970年1月1日00:00:00 UTC對(duì)應(yīng)的秒數(shù)。注意,JavaScript內(nèi)的時(shí)間戳指的是當(dāng)前時(shí)間到1970年1月1日00:00:00 UTC對(duì)應(yīng)的毫秒數(shù),和unix時(shí)間戳不是一個(gè)概念,后者表示秒數(shù),差了1000倍。

時(shí)間數(shù)字字符串格式 RFC2822
YYYY/MM/DD HH:MM:SS ± timezone(時(shí)區(qū)用4位數(shù)字表示)
// eg 1992/02/12 12:23:22+0800
ISO 8601

國際標(biāo)準(zhǔn)化組織的國際標(biāo)準(zhǔn)ISO 8601是日期和時(shí)間的表示方法,全稱為《數(shù)據(jù)存儲(chǔ)和交換形式·信息交換·日期和時(shí)間的表示方法》。目前最新為第三版ISO8601:2004,第一版為ISO8601:1988,第二版為ISO8601:2000。年由4位數(shù)組成,以公歷公元1年為0001年,以公元前1年為0000年,公元前2年為-0001年,其他以此類推。應(yīng)用其他紀(jì)年法要換算成公歷,但如果發(fā)送和接受信息的雙方有共同一致同意的其他紀(jì)年法,可以自行應(yīng)用。

YYYY-MM-DDThh:mm:ss ± timezone(時(shí)區(qū)用HH:MM表示)
1997-07-16T08:20:30Z
// “Z”表示UTC標(biāo)準(zhǔn)時(shí)區(qū),即"00:00",所以這里表示零時(shí)區(qū)的`1997年7月16日08時(shí)20分30秒`
//轉(zhuǎn)換成位于東八區(qū)的北京時(shí)間則為`1997年7月17日16時(shí)20分30秒`
1997-07-16T19:20:30+01:00
// 表示東一區(qū)的1997年7月16日19時(shí)20秒30分,轉(zhuǎn)換成UTC標(biāo)準(zhǔn)時(shí)間的話是1997-07-16T18:20:30Z
Reference

JS原生Date類型方法的一些冷知識(shí)

阮一峰 JavaScript標(biāo)準(zhǔn)參考教程 Date對(duì)象

Date

JavaScript為我們提供了不是很好用的Date對(duì)象作為時(shí)間日期對(duì)象,Date()直接返回當(dāng)前時(shí)間字符串,不管參數(shù)是number還是任何string。而new Date()則是會(huì)根據(jù)參數(shù)來返回對(duì)應(yīng)的值,無參數(shù)的時(shí)候,返回當(dāng)前時(shí)間的字符串形式;有參數(shù)的時(shí)候返回參數(shù)所對(duì)應(yīng)時(shí)間的字符串。new Date()對(duì)參數(shù)不管是格式還是內(nèi)容都要求,且只返回字符串,標(biāo)準(zhǔn)的構(gòu)造Date對(duì)象的方法有:

// 不帶new操作符,像一個(gè)函數(shù)一樣調(diào)用。它將忽略所有傳入的參數(shù),并返回當(dāng)前日期和時(shí)間的一個(gè)字符串表示。
new Date();
// 可接受一個(gè)數(shù)字參數(shù),該參數(shù)表示設(shè)定時(shí)間與1970年1月1日0點(diǎn)之間的毫秒數(shù)。
new Date(value);
// 可接受一個(gè)字符串參數(shù),參數(shù)形式類似于Date.parse()方法。但parse()方法返回的是一個(gè)數(shù)字,而Date()函數(shù)返回的是一個(gè)對(duì)象。
new Date(dateString);
// 可接受參數(shù)形式類似于Date.UTC()方法的參數(shù),但Date.UTC()方法返回是一個(gè)毫秒數(shù),且是UTC時(shí)間,而Date()函數(shù)返回是一個(gè)對(duì)象,且是本地時(shí)間。
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
---------------------------------------------------------------------------------------------------------------------
year:四位年份,如果寫成兩位數(shù),則加上1900
month:表示月份,0表示一月,11表示12月
date:表示日期,1到31
hour:表示小時(shí),0到23
minute:表示分鐘,0到59
second:表示秒鐘,0到59
ms:表示毫秒,0到999

這里需要注意的是,月份month參數(shù),其計(jì)數(shù)方式從0開始,而天day參數(shù),其計(jì)數(shù)方式從1開始

new Date();
//Fri Aug 21 2015 15:51:55 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)
new Date(1293879600000);
new Date("2011-01-01T11:00:00")
new Date("2011/01/01 11:00:00")
new Date(2011,0,1,11,0,0)
new Date("jan 01 2011,11 11:00:00")
new Date("Sat Jan 01 2011 11:00:00")
//Sat Jan 01 2011 11:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)
new Date("sss");
new Date("2011/01/01T11:00:00");
new Date("2011-01-01-11:00:00")
new Date("1293879600000");
//Invalid Date
new Date("2011-01-01T11:00:00")-new Date("1992/02/11 12:00:12")
//596069988000
Parse:解析 TimeStamp:時(shí)間戳

如果需要從當(dāng)前的時(shí)間對(duì)象獲取其相應(yīng)的時(shí)間戳,我們可以使用getTime或者valueOf(),返回距離1970年1月1日0點(diǎn)的毫秒數(shù):

var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
console.log(date1 > date2);//false
console.log(date1 < date2);//true
// ECMAScript5新增了now()方法,該方法返回當(dāng)前時(shí)間距離1970年1月1日0點(diǎn)UTC的毫秒數(shù)。該方法不支持傳遞參數(shù)
Date.now = function(){
    return (new Date()).getTime()
}

另外Date對(duì)象還有一個(gè)靜態(tài)方法同樣返回給定日期的毫秒數(shù)。但其參數(shù)并不是一個(gè)字符串,而是分別代表年、月、日、時(shí)、分、秒、毫秒的數(shù)字參數(shù):

console.log(Date.UTC(1970));//NaN
console.log(Date.UTC(1970,0));//0
console.log(Date.UTC(1970,0,2));//86400000
console.log(Date.UTC(1970,0,1,1));//3600000
console.log(Date.UTC(1970,0,1,1,59));//714000
console.log(Date.UTC(1970,0,1,1,59,30));//717000

還是需要強(qiáng)調(diào)下,JavaScript內(nèi)的時(shí)間戳指的是當(dāng)前時(shí)間到1970年1月1日00:00:00 UTC對(duì)應(yīng)的毫秒數(shù),和unix時(shí)間戳不是一個(gè)概念,后者表示秒數(shù),差了1000倍。new Date(timestamp)中的時(shí)間戳必須是number格式,string會(huì)返回Invalid Date。所以比如new Date("11111111")這種寫法是錯(cuò)的。

DateTimeString:時(shí)間日期字符串

JavaScript原生Date對(duì)于時(shí)間字符串的解析真的是槽點(diǎn)滿滿,假設(shè)我們希望以DD/MM/YYYY的格式進(jìn)行解析,那么它是無法識(shí)別的:

var a = new Date("01/12/2016"); //December 1 2016 in DD/MM/YYYY format
//"Tue Jan 12 2016 00:00:00 GMT-0600 (Central Standard Time)"

另外,在ES5的標(biāo)準(zhǔn)中,其對(duì)ISO 8601標(biāo)準(zhǔn)的字符串進(jìn)行了一個(gè)神奇的斷言:所有沒有提供時(shí)區(qū)的字符串默認(rèn)為標(biāo)準(zhǔn)時(shí)區(qū)。換言之,你會(huì)發(fā)現(xiàn)你解析出來的時(shí)間和你預(yù)期中的不一樣,而且它打印的時(shí)候是按照本地時(shí)區(qū)又進(jìn)行了轉(zhuǎn)換:

//US local format
var a = new Date("1/1/2016"); 
//"Fri Jan 01 2016 00:00:00 GMT-0600 (Central Standard Time)"

//ISO 8601
var a = new Date("2016-01-01");
//"Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)"

ES 2015標(biāo)準(zhǔn)中則是修復(fù)了該Bug,不過還是會(huì)讓人覺得頭大,畢竟你不知道你代碼的最終運(yùn)行環(huán)境會(huì)是ES5還是ES6。Date對(duì)象也有一個(gè)parse方法,用于解析一個(gè)日期字符串,參數(shù)是一個(gè)包含待解析的日期和時(shí)間的字符串,返回從1970年1月1日0點(diǎn)到給定日期的毫秒數(shù)。該方法會(huì)根據(jù)日期時(shí)間字符串格式規(guī)則來解析字符串的格式,除了標(biāo)準(zhǔn)格式外,以下格式也支持。如果字符串無法識(shí)別,將返回NaN。

"月/日/年" 如6/13/2004

"月 日,年" 如January 12,2004或Jan 12,2004

"星期 月 日 年 時(shí):分:秒 時(shí)區(qū)" Tue May 25 2004 00:00:00 GMT-0700

console.log(Date.parse("6/13/2004"));//1087056000000
console.log(Date.parse("January 12,2004"));//1073836800000
console.log(Date.parse("Tue May 25 2004 00:00:00 GMT-0700"));//1085468400000
console.log(Date.parse("2004-05-25T00:00:00"));//1085443200000
console.log(Date.parse("2016"));//1451606400000
console.log(Date.parse("T00:00:00"));//NaN
console.log(Date.parse());//NaN

在ECMAScript5中,如果使用標(biāo)準(zhǔn)的日期時(shí)間字符串格式規(guī)則的字符串中,數(shù)學(xué)前有前置0,則會(huì)解析為UTC時(shí)間,時(shí)間沒有前置0,則會(huì)解析為本地時(shí)間。其他情況一般都會(huì)解析為本地時(shí)間

console.log(Date.parse("7/12/2016"));//1468252800000
console.log(Date.parse("2016-7-12"));//1468252800000
console.log(Date.parse("2016-07-12"));//1468281600000
Manipulate:時(shí)間對(duì)象操作 Get&Set

Date對(duì)象提供了一系列g(shù)et*方法,用來獲取實(shí)例對(duì)象某個(gè)方面的值。具體的Get函數(shù)列表詳見附錄:

var d = new Date("January 6, 2013");

d.getDate() // 6
d.getMonth() // 0
d.getYear() // 113
d.getFullYear() // 2013
d.getTimezoneOffset() // -480

同樣的,Date對(duì)象還提供了一系列的Set方法:

var d1 = new Date("January 6, 2013");

d1.setDate(32) // 1359648000000
d1 // Fri Feb 01 2013 00:00:00 GMT+0800 (CST)

var d2 = new Date ("January 6, 2013");

d.setDate(-1) // 1356796800000
d // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
Add&Subtract

我們可以巧用Set方法的特性,set*方法的參數(shù)都會(huì)自動(dòng)折算。以setDate為例,如果參數(shù)超過當(dāng)月的最大天數(shù),則向下一個(gè)月順延,如果參數(shù)是負(fù)數(shù),表示從上個(gè)月的最后一天開始減去的天數(shù)。

var d1 = new Date("January 6, 2013");

d1.setDate(32) // 1359648000000
d1 // Fri Feb 01 2013 00:00:00 GMT+0800 (CST)

var d2 = new Date ("January 6, 2013");

d.setDate(-1) // 1356796800000
d // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)

var d = new Date();

// 將日期向后推1000天
d.setDate( d.getDate() + 1000 );

// 將時(shí)間設(shè)為6小時(shí)后
d.setHours(d.getHours() + 6);

// 將年份設(shè)為去年
d.setFullYear(d.getFullYear() - 1);
Diff:計(jì)算差值

類型轉(zhuǎn)換時(shí),Date對(duì)象的實(shí)例如果轉(zhuǎn)為數(shù)值,則等于對(duì)應(yīng)的毫秒數(shù);如果轉(zhuǎn)為字符串,則等于對(duì)應(yīng)的日期字符串。所以,兩個(gè)日期對(duì)象進(jìn)行減法運(yùn)算,返回的就是它們間隔的毫秒數(shù);進(jìn)行加法運(yùn)算,返回的就是連接后的兩個(gè)字符串。

var d1 = new Date(2000, 2, 1);

var d2 = new Date(2000, 3, 1);

d2 - d1
// 2678400000
d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"
Display:時(shí)間展示 Format:格式化

Date對(duì)象提供了一系列的to*方法來支持從Date對(duì)象轉(zhuǎn)化為字符串,具體的函數(shù)列表詳見附錄:

var d = new Date(2013, 0, 1);

d.toString()
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"

d.toUTCString()
// "Mon, 31 Dec 2012 16:00:00 GMT"

d.toISOString()
// "2012-12-31T16:00:00.000Z"

d.toJSON()
// "2012-12-31T16:00:00.000Z"

d.toDateString() // "Tue Jan 01 2013"

d.toTimeString() // "00:00:00 GMT+0800 (CST)"

d.toLocaleDateString()
// 中文版瀏覽器為"2013年1月1日"
// 英文版瀏覽器為"1/1/2013"

d.toLocaleTimeString()
// 中文版瀏覽器為"上午12:00:00"
// 英文版瀏覽器為"12:00:00 AM"
Durations:時(shí)長
const nMS = 1320; //以毫秒單位表示的差值時(shí)間
var nD = Math.floor(nMS/(1000 * 60 * 60 * 24));
var nH = Math.floor(nMS/(1000*60*60)) % 24;
var nM = Math.floor(nMS/(1000*60)) % 60;
var nS = Math.floor(nMS/1000) % 60;
i18n:國際化

瀏覽器獲取當(dāng)前用戶所在的時(shí)區(qū)等信息只和系統(tǒng)的日期和時(shí)間設(shè)置里的時(shí)區(qū)以及時(shí)間有關(guān)。區(qū)域和語言設(shè)置影響的是瀏覽器默認(rèn)時(shí)間函數(shù)(Date.prototype.toLocaleString等)顯示的格式,不會(huì)對(duì)時(shí)區(qū)等有影響。Date有個(gè)Date.prototype.toLocaleString()方法可以將時(shí)間字符串返回用戶本地字符串格式,這個(gè)方法還有兩個(gè)子方法Date.prototype.toLocaleDateString和Date.prototype.toLocaleTimeString,這兩個(gè)方法返回值分別表示日期和時(shí)間,加一起就是Date.prototype.toLocaleString的結(jié)果。這個(gè)方法的默認(rèn)參數(shù)會(huì)對(duì)時(shí)間字符串做一次轉(zhuǎn)換,將其轉(zhuǎn)換成用戶當(dāng)前所在時(shí)區(qū)的時(shí)間,并按照對(duì)應(yīng)的系統(tǒng)設(shè)置時(shí)間格式返回字符串結(jié)果。然而不同瀏覽器對(duì)用戶本地所使用的語言格式的判斷依據(jù)是不同的。

IE:獲取系統(tǒng)當(dāng)前的區(qū)域和語言-格式中設(shè)置的格式,依照其對(duì)應(yīng)的格式來顯示當(dāng)前時(shí)間結(jié)果;IE瀏覽器實(shí)時(shí)查詢?cè)撓到y(tǒng)設(shè)置(即你在瀏覽器窗口打開后去更改系統(tǒng)設(shè)置也會(huì)引起返回格式變化)。假設(shè)系統(tǒng)語言為 ja-JP,系統(tǒng)unicode語言為zh-CN日期格式為nl-NL,瀏覽器語言設(shè)置(accept-language)為de,瀏覽器界面語言為en-US(其他條件不變,瀏覽器界面語言改為zh-CN的時(shí)候結(jié)果也是一樣),

window.navigator.language
//"nl-NL"
window.navigator.systemLanguage
//"zh-CN"(設(shè)置中的非unicode程序所使用語言選項(xiàng))
window.navigator.userLanguage
//"nl-NL"
window.navigator.browserLanguage
//"ja-JP"(系統(tǒng)菜單界面語言)
window.navigator.languages
//undefined

FF:獲取方式和結(jié)果與IE瀏覽器相同,區(qū)別在于FF只會(huì)在瀏覽器進(jìn)程第一次啟動(dòng)的時(shí)候獲取一次系統(tǒng)設(shè)置,中間不管怎么系統(tǒng)設(shè)置怎么變化,F(xiàn)F都無法獲取到當(dāng)前系統(tǒng)設(shè)置。除非重啟FF瀏覽器。當(dāng)瀏覽器界面語言為zh-CN,accept-language首位為en-US的時(shí)候:

window.navigator.language
//"en-US"
window.navigator.languages
//["en-US", "zh-CN", "de", "zh", "en"]
//當(dāng)界面語言改為"en-US",`accept-language`首位為`zh-CN`的時(shí)候
window.navigator.language
//"zh-CN"(`accept-language`首選值)
window.navigator.languages
//["zh-CN", "de", "zh", "en-US", "en"]

Chrome:獲取方式和以上兩個(gè)都不同。chrome無視系統(tǒng)的區(qū)域和語言-格式格式,只依照自己瀏覽器的界面設(shè)置的菜單語言來處理。(比如英文界面則按系統(tǒng)’en-US’格式返回字符串,中文界面則按系統(tǒng)’zh-CN’格式返回結(jié)果)。當(dāng)瀏覽器界面語言為zh-CN,accept-language首位為en-US的時(shí)候:

window.navigator.language
//"zh-CN"
window.navigator.languages
//["en-US", "en", "zh-CN", "zh", "ja", "zh-TW", "de-LI", "de", "pl"]
//當(dāng)界面語言改為"en-US"時(shí)
window.navigator.language
//"en-US"(瀏覽器界面語言)
Calendar:日歷操作 Moment.js

Moment.js為JavaScript Date對(duì)象提供了封裝與統(tǒng)一好的API接口,并且提供了更多的功能。首先需要了解的是,Moment提供的moment對(duì)象是可變的,即當(dāng)我們對(duì)該對(duì)象執(zhí)行類似于增減或者設(shè)置的時(shí)候,其對(duì)象本身的值會(huì)發(fā)生變化,譬如下面這段代碼:

var a = moment("2016-01-01"); 
var b = a.add(1, "week"); 
a.format();
"2016-01-08T00:00:00-06:00"

而如果我們不希望改變?cè)械闹担貏e是在需要?jiǎng)?chuàng)建多個(gè)時(shí)間日期對(duì)象的時(shí)候,我們可以利用clone方法:

var a = moment("2016-01-01"); 
var b = a.clone().add(1, "week"); 
a.format();
"2016-01-01T00:00:00-06:00"

筆者是習(xí)慣在Webpack中進(jìn)行打包,類似于Node下的安裝方式:

//安裝
npm install moment
//使用
var moment = require("moment");
moment().format();

如果你需要引入某個(gè)語言包,那么可以用如下方式:

var moment = require("moment");
require("moment/locale/cs");
console.log(moment.locale()); // cs
Parse TimeStamp
//毫秒
var day = moment(1318781876406);
//秒
var day = moment.unix(1318781876);
DateTimeString
moment("2010-10-20 4:30",       "YYYY-MM-DD HH:mm");   // parsed as 4:30 local time
moment("2010-10-20 4:30 +0000", "YYYY-MM-DD HH:mm Z"); // parsed as 4:30 UTC

moment("2010 13",           "YYYY MM").isValid();     // false (not a real month)
moment("2010 11 31",        "YYYY MM DD").isValid();  // false (not a real day)
moment("2010 2 29",         "YYYY MM DD").isValid();  // false (not a leap year)
moment("2010 notamonth 29", "YYYY MMM DD").isValid(); // false (not a real month name)
Manipulate Get/Set
moment().seconds(30) === new Date().setSeconds(30);
moment().seconds()   === new Date().getSeconds();

moment().get("year");
moment().get("month");  // 0 to 11
moment().get("date");
moment().get("hour");
moment().get("minute");
moment().get("second");
moment().get("millisecond");
moment().set("year", 2013);
moment().set("month", 3);  // April
moment().set("date", 1);
moment().set("hour", 13);
moment().set("minute", 20);
moment().set("second", 30);
moment().set("millisecond", 123);

moment().set({"year": 2013, "month": 3});
Add&Subtract
moment().add(Number, String);
moment().add(Duration);
moment().add(Object);

moment().add(7, "days");

moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);

moment().subtract(7, "days");
Comparison
moment().isBefore(Moment|String|Number|Date|Array);
moment().isBefore(Moment|String|Number|Date|Array, String);

moment("2010-10-20").isBefore("2010-12-31", "year"); // false
moment("2010-10-20").isBefore("2011-01-01", "year"); // true
Diff
moment().diff(Moment|String|Number|Date|Array);
moment().diff(Moment|String|Number|Date|Array, String);
moment().diff(Moment|String|Number|Date|Array, String, Boolean);

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, "days") // 1
Display Format
moment().format();                                // "2014-09-08T08:02:17-05:00" (ISO 8601)
moment().format("ffffdd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("ffffd, hA");                       // "Sun, 3PM"
moment("gibberish").format("YYYY MM DD");         // "Invalid date"
Relative Format
moment([2007, 0, 29]).fromNow();     // 4 years ago
moment([2007, 0, 29]).fromNow(true); // 4 years
Duration
moment.duration(1, "minutes").humanize(); // a minute
moment.duration(2, "minutes").humanize(); // 2 minutes
moment.duration(24, "hours").humanize();  // a day
i18n 附錄 Date APIs

Date 對(duì)象用于處理日期和時(shí)間。其核心的方法如下列表所示:

方法 描述
Date() 返回當(dāng)日的日期和時(shí)間。
getDate() 從 Date 對(duì)象返回一個(gè)月中的某一天 (1 ~ 31)。
getDay() 從 Date 對(duì)象返回一周中的某一天 (0 ~ 6)。
getMonth() 從 Date 對(duì)象返回月份 (0 ~ 11)。
getFullYear() 從 Date 對(duì)象以四位數(shù)字返回年份。
getYear() 請(qǐng)使用 getFullYear() 方法代替。
getHours() 返回 Date 對(duì)象的小時(shí) (0 ~ 23)。
getMinutes() 返回 Date 對(duì)象的分鐘 (0 ~ 59)。
getSeconds() 返回 Date 對(duì)象的秒數(shù) (0 ~ 59)。
getMilliseconds() 返回 Date 對(duì)象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒數(shù)。
getTimezoneOffset() 返回本地時(shí)間與格林威治標(biāo)準(zhǔn)時(shí)間 (GMT) 的分鐘差。
getUTCDate() 根據(jù)世界時(shí)從 Date 對(duì)象返回月中的一天 (1 ~ 31)。
getUTCDay() 根據(jù)世界時(shí)從 Date 對(duì)象返回周中的一天 (0 ~ 6)。
getUTCMonth() 根據(jù)世界時(shí)從 Date 對(duì)象返回月份 (0 ~ 11)。
getUTCFullYear() 根據(jù)世界時(shí)從 Date 對(duì)象返回四位數(shù)的年份。
getUTCHours() 根據(jù)世界時(shí)返回 Date 對(duì)象的小時(shí) (0 ~ 23)。
getUTCMinutes() 根據(jù)世界時(shí)返回 Date 對(duì)象的分鐘 (0 ~ 59)。
getUTCSeconds() 根據(jù)世界時(shí)返回 Date 對(duì)象的秒鐘 (0 ~ 59)。
getUTCMilliseconds() 根據(jù)世界時(shí)返回 Date 對(duì)象的毫秒(0 ~ 999)。
parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒數(shù)。
setDate() 設(shè)置 Date 對(duì)象中月的某一天 (1 ~ 31)。
setMonth() 設(shè)置 Date 對(duì)象中月份 (0 ~ 11)。
setFullYear() 設(shè)置 Date 對(duì)象中的年份(四位數(shù)字)。
setYear() 請(qǐng)使用 setFullYear() 方法代替。
setHours() 設(shè)置 Date 對(duì)象中的小時(shí) (0 ~ 23)。
setMinutes() 設(shè)置 Date 對(duì)象中的分鐘 (0 ~ 59)。
setSeconds() 設(shè)置 Date 對(duì)象中的秒鐘 (0 ~ 59)。
setMilliseconds() 設(shè)置 Date 對(duì)象中的毫秒 (0 ~ 999)。
setTime() 以毫秒設(shè)置 Date 對(duì)象。
setUTCDate() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中月份的一天 (1 ~ 31)。
setUTCMonth() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的月份 (0 ~ 11)。
setUTCFullYear() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的年份(四位數(shù)字)。
setUTCHours() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的小時(shí) (0 ~ 23)。
setUTCMinutes() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的分鐘 (0 ~ 59)。
setUTCSeconds() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的秒鐘 (0 ~ 59)。
setUTCMilliseconds() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的毫秒 (0 ~ 999)。
toSource() 返回該對(duì)象的源代碼。
toString() 把 Date 對(duì)象轉(zhuǎn)換為字符串。
toTimeString() 把 Date 對(duì)象的時(shí)間部分轉(zhuǎn)換為字符串。
toDateString() 把 Date 對(duì)象的日期部分轉(zhuǎn)換為字符串。
toGMTString() 請(qǐng)使用 toUTCString() 方法代替。
toUTCString() 根據(jù)世界時(shí),把 Date 對(duì)象轉(zhuǎn)換為字符串。
toLocaleString() 根據(jù)本地時(shí)間格式,把 Date 對(duì)象轉(zhuǎn)換為字符串。
toLocaleTimeString() 根據(jù)本地時(shí)間格式,把 Date 對(duì)象的時(shí)間部分轉(zhuǎn)換為字符串。
toLocaleDateString() 根據(jù)本地時(shí)間格式,把 Date 對(duì)象的日期部分轉(zhuǎn)換為字符串。
UTC() 根據(jù)世界時(shí)返回 1970 年 1 月 1 日 到指定日期的毫秒數(shù)。
valueOf() 返回 Date 對(duì)象的原始值。
時(shí)間日期格式參數(shù)

(1)年月日

Input Example Description
YYYY 2014 4 or 2 digit year
YY 14 2 digit year
Y -25 Year with any number of digits and sign
Q 1..4 Quarter of year. Sets month to first month in quarter.
M MM 1..12 Month number
MMM MMMM Jan..December Month name in locale set by moment.locale()
D DD 1..31 Day of month
Do 1st..31st Day of month with ordinal
DDD DDDD 1..365 Day of year
X 1410715640.579 Unix timestamp
x 1410715640579 Unix ms timestamp

(2)時(shí)分秒

Input Example Description
H HH 0..23 24 hour time
h hh 1..12 12 hour time used with a A.
a A am pm Post or ante meridiem (Note the one character a p are also considered valid)
m mm 0..59 Minutes
s ss 0..59 Seconds
S SS SSS 0..999 Fractional seconds
Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/81015.html

相關(guān)文章

  • 從用戶端到后臺(tái)系統(tǒng),嚴(yán)選分銷教會(huì)我這些事

    摘要:而嚴(yán)選現(xiàn)有的后臺(tái)系統(tǒng)多數(shù)是基于現(xiàn)有流程的設(shè)計(jì),現(xiàn)有的流程存在即顆粒。再來說設(shè)計(jì)功能這件事,后臺(tái)系統(tǒng)和用戶端相比,數(shù)據(jù)的重要性大大凸顯。,我和嚴(yán)選分銷一起繼續(xù)成長更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗(yàn)分享請(qǐng)?jiān)L問網(wǎng)易云社區(qū)。 本文由作者朱夢(mèng)珺授權(quán)網(wǎng)易云社區(qū)發(fā)布。 從5月份接手嚴(yán)選分銷系統(tǒng)到現(xiàn)在,被坑過無數(shù)次 所以不能我一個(gè)人被坑,被坑過的那些事要告訴你們 從用戶端到后臺(tái)系統(tǒng),最大的區(qū)別就是業(yè)務(wù)本身 之前...

    shengguo 評(píng)論0 收藏0
  • 從零開始:微信小程序新手入門寶典《一》

    摘要:為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí)一微信小程序的特點(diǎn)張小龍張小龍全面闡述小程序,推薦通讀此文小程序是一種不需要下載安裝即可使用的應(yīng)用,它出現(xiàn)了觸手可及的夢(mèng)想,用戶掃一掃或者搜一下即 為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí); 一:微信小程序的特點(diǎn) 張小龍:張小龍全面闡述小程...

    whataa 評(píng)論0 收藏0
  • 從零開始:微信小程序新手入門寶典《一》

    摘要:為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí)一微信小程序的特點(diǎn)張小龍張小龍全面闡述小程序,推薦通讀此文小程序是一種不需要下載安裝即可使用的應(yīng)用,它出現(xiàn)了觸手可及的夢(mèng)想,用戶掃一掃或者搜一下即 為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí); 一:微信小程序的特點(diǎn) 張小龍:張小龍全面闡述小程...

    mdluo 評(píng)論0 收藏0
  • 從零開始:微信小程序新手入門寶典《一》

    摘要:為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí)一微信小程序的特點(diǎn)張小龍張小龍全面闡述小程序,推薦通讀此文小程序是一種不需要下載安裝即可使用的應(yīng)用,它出現(xiàn)了觸手可及的夢(mèng)想,用戶掃一掃或者搜一下即 為了方便大家了解并入門微信小程序,我將一些可能會(huì)需要的知識(shí),列在這里,讓大家方便的從零開始學(xué)習(xí); 一:微信小程序的特點(diǎn) 張小龍:張小龍全面闡述小程...

    LdhAndroid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<