成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Date類型:了解日期和時(shí)間

RaoMeng / 1705人閱讀

摘要:實(shí)際上,構(gòu)造函數(shù)接收的參數(shù)是一個(gè)從年月日凌晨點(diǎn)到希望設(shè)定的時(shí)間點(diǎn)的毫秒數(shù)可以為負(fù),表示在此之前。當(dāng)前時(shí)間構(gòu)造函數(shù)的另一個(gè)非常常用的用法是,不傳遞參數(shù),這時(shí)候,新創(chuàng)建的對(duì)象將自動(dòng)獲得當(dāng)前日期和時(shí)間。

Date是javascript中的引用數(shù)據(jù)類型之一,如果要處理日期、時(shí)間,一般都會(huì)用到Date類型。不過(guò),要正確地使用Date,還應(yīng)該了解日期和時(shí)間有關(guān)的概念。就從Date類型的方法開(kāi)始吧。

創(chuàng)建Date

下面這段代碼用了不同的形式,創(chuàng)建了一個(gè)名為teaTime的變量,并賦值為Date類型值,時(shí)間是最近的某一個(gè)時(shí)間點(diǎn):

// one way
var teaTime = new Date("Aug 21 2014 16:40:14");

// equivalent to...
var teaTime = new Date(2014, 7, 21, 16, 40, 14);

其中,構(gòu)造函數(shù)Date傳入了兩種參數(shù),來(lái)賦值給teaTime。不過(guò),它們的效果是相同的,都代表同一個(gè)時(shí)間點(diǎn)。實(shí)際上,構(gòu)造函數(shù)Date接收的參數(shù)是一個(gè)從1970年1月1日凌晨0點(diǎn)到希望設(shè)定的時(shí)間點(diǎn)的毫秒數(shù)(可以為負(fù),表示在此之前)。上面的例子為什么可行呢?這是因?yàn)閷?duì)于第一種字符串形式的單個(gè)參數(shù),會(huì)在后臺(tái)先調(diào)用Date.parse()方法轉(zhuǎn)化為毫秒數(shù)。類似的,第二種數(shù)字形式的多個(gè)參數(shù)(你可能還發(fā)現(xiàn)了月份是以數(shù)字0~11來(lái)表示的),會(huì)在后臺(tái)調(diào)用Date.UTC()方法轉(zhuǎn)化為毫秒數(shù)。

UTC?這是什么?

UTC

UTC是指協(xié)調(diào)世界時(shí),是最主要的世界時(shí)間標(biāo)準(zhǔn)。這個(gè)縮寫也是有來(lái)源的,英語(yǔ)中它是CUT(Cooordinated Universal Time),而法語(yǔ)中它是TUC(Temps Universel Coordonné),由于被希望協(xié)調(diào)世界時(shí)在所有語(yǔ)言中有統(tǒng)一的縮寫,最后妥協(xié)使用了這個(gè)[UTC][](竟然妥協(xié)了?。?/p>

UTC是以[原子時(shí)][]秒長(zhǎng)為基礎(chǔ)的。也許你還有印象,在國(guó)際單位制(SI)中,只有7個(gè)基本單位,秒(s)就是其中之一,用的就是原子時(shí)。因此,UTC足夠精確,被作為現(xiàn)今使用的標(biāo)準(zhǔn)時(shí)間。

與UTC非常有關(guān)的是另一個(gè)經(jīng)常被提及的時(shí)間標(biāo)準(zhǔn),GMT。

GMT

GMT是指格林尼治標(biāo)準(zhǔn)時(shí)間,它對(duì)應(yīng)位于英國(guó)倫敦郊區(qū)的皇家格林威治天文臺(tái)的標(biāo)準(zhǔn)時(shí)間。[GMT][](Greenwich Mean Time)受地球自轉(zhuǎn)影響,可能有較大誤差,因此GMT已經(jīng)不再被作為標(biāo)準(zhǔn)時(shí)間使用(也就是說(shuō),現(xiàn)在用UTC作為標(biāo)準(zhǔn))。不過(guò),如果不考慮小于0.9秒的差異,GMT和UTC的時(shí)間可以認(rèn)為是一樣的。

Date.parse()可用的字符串格式

從前文可以知道,由于并不方便直接傳入一個(gè)相對(duì)于1970年1月1日凌晨0點(diǎn)的毫秒數(shù),通常我們都用Date.parse()Date.UTC()所支持的參數(shù)形式。其中,Date.parse()是接收表示日期的字符串參數(shù),如果格式不對(duì),將返回NaN。

Date.parse()可用的表示日期的字符串包括RFC2822[]。此外,可能會(huì)支持一些其他的格式,但因地區(qū)、瀏覽器差異,不能確??捎茫ㄋ?,建議不使用)。

其中,ISO 8601的格式,例如下面這樣的寫法:

var teaTime = new Date("2014-08-21T18:11:35");

只有兼容ECMAScript 5的瀏覽器才可用。以我自己的測(cè)試結(jié)果而言,IE8及以下不支持(返回NaN),請(qǐng)注意。

當(dāng)前時(shí)間

Date構(gòu)造函數(shù)的另一個(gè)非常常用的用法是,不傳遞參數(shù),這時(shí)候,新創(chuàng)建的對(duì)象將自動(dòng)獲得當(dāng)前日期和時(shí)間。由于這里獲得的當(dāng)前時(shí)間是運(yùn)行javascript的設(shè)備的系統(tǒng)時(shí)間,所以如果你自己手工更改了系統(tǒng)時(shí)間至不和真實(shí)情況一致,則javascript返回的結(jié)果也同樣不和真實(shí)情況一致。

在指定時(shí)間內(nèi)阻塞javascript代碼,可以用Date實(shí)現(xiàn):

var start = new Date();
while (new Date() - start < 1000) {
// wait 1 second...
};

這可以用于某些測(cè)試。

超出范圍的時(shí)間值

如果使用超出范圍的時(shí)間值,不同的瀏覽器會(huì)有不同的處理。例如,在寫本文的時(shí)間點(diǎn),我測(cè)試了Aug 20 2014 15:75:32這樣的值,F(xiàn)irefox 31會(huì)將其處理為Aug 20 2014 16:15:32,Chrome 36和IE9+返回Invalid Date,IE8-返回NaN

可見(jiàn),要保證正常運(yùn)行,最好的做法是保證輸入的就是合法的時(shí)間值。

不使用new關(guān)鍵字的情況

如果不使用關(guān)鍵字new,也就是說(shuō),直接調(diào)用Date(),則無(wú)論傳什么參數(shù),都返回一個(gè)String字符串?dāng)?shù)據(jù),其內(nèi)容是當(dāng)前時(shí)間,相當(dāng)于Date.now().toString()的結(jié)果:

// will get a string like "Fri Aug 22 2014 10:10:08 GMT+0800"
var teaTime = Date("Aldnoah Zero");
顯示一致的時(shí)間信息

使用Date類型,一般是為了在頁(yè)面中顯示時(shí)間信息。不過(guò),事實(shí)情況是,Date類型所有的將日期格式化為字符串的方法,包括toString()toLocaleString(),其結(jié)果都因?yàn)g覽器不同而不同。因此,如果要顯示一致的時(shí)間信息,應(yīng)該使用getFullYear()、getMonth()等get方法依次獲取時(shí)間中的數(shù)字信息,然后自己以字符串組合的方式來(lái)組成自己想要的時(shí)間信息。例如:

var time = new Date("Aug 22 2014 16:40:54"),
timeString = "";

timeString += time.getFullYear() + "-";
timeString += (time.getMonth() + 1) + "-";
timeString += time.getDate() + " ";
timeString += time.getHours() + ":";
timeString += time.getMinutes() + ":";
timeString += time.getSeconds();

alert(timeString); // 2014-8-22 16:40:54 in all browsers

需要注意的是,get方法有類似getUTCHours()getHours()這樣以UTC作為分別的情況。UTC系列的get方法返回的是前面所說(shuō)的世界標(biāo)準(zhǔn)時(shí)間,時(shí)區(qū)上說(shuō)就是零時(shí)區(qū)。而不帶UTC的get方法返回的是當(dāng)?shù)貢r(shí)間。由于我們一般會(huì)用到的時(shí)間都是當(dāng)?shù)貢r(shí)間(比如國(guó)內(nèi)是東八區(qū),記為UTC/GMT +0800),所以基本只會(huì)用到getHours()這種形式的方法。

有關(guān)詳細(xì)的Date類型的方法,請(qǐng)參考[MDN對(duì)Date的解釋][]。

獲得時(shí)區(qū)信息

Date類型有一個(gè)getTimezoneOffset()的方法,它可以用來(lái)分析本地與UTC時(shí)間之間的時(shí)差。比如我自己這里調(diào)用的結(jié)果:

// -480 while I"m in china
var hereTimeOffset = new Date().getTimezoneOffset();

它的結(jié)果是本地時(shí)間和UTC時(shí)間相差的分鐘數(shù)(而且是 UTC - 本地時(shí)間)。如果這個(gè)“本地”進(jìn)入夏令時(shí),這個(gè)值會(huì)有變化。

什么是夏令時(shí)?

DST

DST是指夏令時(shí)間,也叫做日光節(jié)約時(shí)間(Daylight saving time)。它是由部分國(guó)家所實(shí)施的在一年中的某一時(shí)間段(以夏季為中心,例如美國(guó)的4月到10月)內(nèi),將時(shí)間撥快1小時(shí),以充分利用夏季較長(zhǎng)的日光時(shí)間,節(jié)約能源的時(shí)間制度。在實(shí)行夏令時(shí)的國(guó)家中,不同國(guó)家也會(huì)有不同的夏令時(shí)實(shí)施日期。

為什么說(shuō)DST會(huì)影響到getTimezoneOffset()這個(gè)值呢,看看Windows 7里的日期和時(shí)間選項(xiàng):

可見(jiàn),夏令時(shí)已經(jīng)被集成在系統(tǒng)內(nèi),會(huì)對(duì)應(yīng)地改變系統(tǒng)時(shí)間,從而影響結(jié)果。不過(guò),你可以從上面看到,中國(guó)未實(shí)行夏令時(shí),所以不必?fù)?dān)心受到影響,在此了解一下就可以了。

倒計(jì)時(shí)的制作方法

如何制作一個(gè)倒計(jì)時(shí)?

首先,需要明確的是,javascript的每一個(gè)Date對(duì)象表示的雖然是一個(gè)時(shí)間點(diǎn),看起來(lái)包括年月日時(shí)分秒等多重信息,但它實(shí)際是由單個(gè)數(shù)字信息體現(xiàn)的,這個(gè)數(shù)字就是相對(duì)于1970年1月1日凌晨0點(diǎn)UTC的毫秒數(shù)。因此,將時(shí)間點(diǎn)對(duì)應(yīng)的毫秒數(shù),做減法,然后將差值結(jié)果(也是毫秒數(shù))依次轉(zhuǎn)化為其他不同級(jí)別的時(shí)間單位,就可以得到倒計(jì)時(shí)信息。

你可以參考[How to create a simple javascript countdown timer][]。

結(jié)語(yǔ)

最近在完成某個(gè)日期和時(shí)間有關(guān)的功能時(shí),發(fā)現(xiàn)自己對(duì)諸如UTC這樣的概念都沒(méi)有什么印象。所以,果斷地自己補(bǔ)習(xí)了一下,然后整理成了這篇文章。

(重新編輯自我的博客,原文地址:http://acgtofe.com/posts/2014/08/a-tale-of-date)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85267.html

相關(guān)文章

  • javascript日期類型(Date)與php日期類型詳解

    摘要:注意客戶端與服務(wù)器日期進(jìn)行傳輸?shù)臅r(shí)候一般都是用大整數(shù)時(shí)間戳進(jìn)行傳輸。 前言 一個(gè)網(wǎng)站的開(kāi)發(fā)需要要UI、前端、后端三種工程師?,F(xiàn)在的企業(yè)在招聘前端工程師的時(shí)候一般都要求其了解或者掌握一些后端的知識(shí)。因此,此文章主要介紹javascript的日期類型,也粗略的介紹一下php的日期類型,以及二者是如何交互數(shù)據(jù)的。 時(shí)間戳 什么是時(shí)間戳 時(shí)間戳是從格林威治時(shí)間1970年1月1日(00:0...

    chemzqm 評(píng)論0 收藏0
  • javascript日期類型(Date)與php日期類型詳解

    摘要:注意客戶端與服務(wù)器日期進(jìn)行傳輸?shù)臅r(shí)候一般都是用大整數(shù)時(shí)間戳進(jìn)行傳輸。 前言 一個(gè)網(wǎng)站的開(kāi)發(fā)需要要UI、前端、后端三種工程師。現(xiàn)在的企業(yè)在招聘前端工程師的時(shí)候一般都要求其了解或者掌握一些后端的知識(shí)。因此,此文章主要介紹javascript的日期類型,也粗略的介紹一下php的日期類型,以及二者是如何交互數(shù)據(jù)的。 時(shí)間戳 什么是時(shí)間戳 時(shí)間戳是從格林威治時(shí)間1970年1月1日(00:0...

    BDEEFE 評(píng)論0 收藏0
  • javascript引用類型Date

    摘要:實(shí)際上如果我們直接將字符串傳入構(gòu)造函數(shù),后臺(tái)也會(huì)調(diào)用方法。而直接與方法參數(shù)相同的值傳入構(gòu)造函數(shù),獲取的日期對(duì)象都是基于系統(tǒng)設(shè)置的本地時(shí)間創(chuàng)建的。中國(guó)標(biāo)準(zhǔn)時(shí)間中國(guó)標(biāo)準(zhǔn)時(shí)間中國(guó)標(biāo)準(zhǔn)時(shí)間由上面的代碼可以發(fā)現(xiàn),其實(shí)是的引用,發(fā)生變化時(shí),也隨之改變。 最近的項(xiàng)目需要實(shí)現(xiàn)一個(gè)時(shí)間表格的效果,如下圖所示,每次更換第幾周時(shí)也更新對(duì)應(yīng)的日期。使用了Date類型,也踩了些坑。故寫下此篇筆記。 showIm...

    tinna 評(píng)論0 收藏0
  • 聊聊 JavaScript 中的 Date 對(duì)象

    摘要:一起來(lái)看看中的日期對(duì)象。對(duì)象和其他對(duì)象如等一樣,對(duì)象是語(yǔ)言中的內(nèi)建對(duì)象。在工作中,對(duì)象有著許多重要的應(yīng)用。這意味著,當(dāng)前時(shí)間與標(biāo)準(zhǔn)時(shí)區(qū)相差小時(shí)。,全稱是國(guó)際標(biāo)準(zhǔn)化組織,負(fù)責(zé)制定全世界工商業(yè)國(guó)際標(biāo)準(zhǔn)的國(guó)際標(biāo)準(zhǔn)。 原文地址: http://www.wemlion.com/2016/d... 時(shí)間的發(fā)現(xiàn) 日常生活中,各種形式的時(shí)間字符到處都是。 時(shí)間觀念的產(chǎn)生,時(shí)間單位、計(jì)時(shí)工具的發(fā)明,給人...

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

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

0條評(píng)論

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