亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Date類型:了解日期和時間

RaoMeng / 1717人閱讀

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

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

創(chuàng)建Date

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

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

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

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

UTC?這是什么?

UTC

UTC是指協(xié)調(diào)世界時,是最主要的世界時間標準。這個縮寫也是有來源的,英語中它是CUT(Cooordinated Universal Time),而法語中它是TUC(Temps Universel Coordonné),由于被希望協(xié)調(diào)世界時在所有語言中有統(tǒng)一的縮寫,最后妥協(xié)使用了這個[UTC][](竟然妥協(xié)了!)。

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

與UTC非常有關的是另一個經(jīng)常被提及的時間標準,GMT。

GMT

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

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

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

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

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

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

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

當前時間

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

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

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

這可以用于某些測試。

超出范圍的時間值

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

可見,要保證正常運行,最好的做法是保證輸入的就是合法的時間值。

不使用new關鍵字的情況

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

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

使用Date類型,一般是為了在頁面中顯示時間信息。不過,事實情況是,Date類型所有的將日期格式化為字符串的方法,包括toString()toLocaleString(),其結(jié)果都因瀏覽器不同而不同。因此,如果要顯示一致的時間信息,應該使用getFullYear()、getMonth()等get方法依次獲取時間中的數(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方法返回的是前面所說的世界標準時間,時區(qū)上說就是零時區(qū)。而不帶UTC的get方法返回的是當?shù)貢r間。由于我們一般會用到的時間都是當?shù)貢r間(比如國內(nèi)是東八區(qū),記為UTC/GMT +0800),所以基本只會用到getHours()這種形式的方法。

有關詳細的Date類型的方法,請參考[MDN對Date的解釋][]。

獲得時區(qū)信息

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

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

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

什么是夏令時?

DST

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

為什么說DST會影響到getTimezoneOffset()這個值呢,看看Windows 7里的日期和時間選項:

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

倒計時的制作方法

如何制作一個倒計時?

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

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

結(jié)語

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

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/85267.html

相關文章

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

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

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

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

    BDEEFE 評論0 收藏0
  • javascript引用類型Date

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

    tinna 評論0 收藏0
  • 聊聊 JavaScript 中的 Date 對象

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

    adie 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<