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

資訊專欄INFORMATION COLUMN

JS基礎篇--日期Date詳解與實例擴展

Apollo / 1567人閱讀

摘要:實際上,如果直接將表示日期的字符串傳遞給構造函數,也會在后臺調用方法,例如下面的代碼跟前面的是等價的。構造函數構造函數會模仿但有一點不同的是,日期和時間都是基于本地時區而非來創建。兼容性問題啊其原因就是非標準日期格式。

一:Date類型介紹

要創建一個日期對象,使用new操作符和Date構造函數即可:

var now = new Date();

Date.parse()方法

其中Date.parse()方法接收一個表示日期的字符串參數,然后嘗試根據這個字符串返回相應日期的毫秒數。ECMA-262沒有定義Date.parse()應該支持哪種日期格式,因此這個方法的行為因實現而異,而且通常是因地區而異。將地區設置為美國的瀏覽器通常都接受下列日期格式:

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

"英文月名 日,年",如May 12,2004;

"英文星期幾 英文月名 日 年 時:分:秒 時區",如Tue May 25 2004 00:00:00 GMT+0800。

ISO 8601擴展格式YYYY-MM-DDTHH:mm:ss:sssZ(例如
2004-05-25T00::00:00)。只有兼容ECMAScript5的實現支持這種格式。

例如,要為2004年5月25日創建一個日期對象,可以使用下面的代碼:

//Tue May 25 2004 00:00:00 GMT+0800 (中國標準時間)
var someDate = new Date(Date.parse("May 25,2004"));

如果傳入Data.parse()的方法的字符串不能表示日期格式,會返回NAN。實際上,如果直接將表示日期的字符串傳遞給Date構造函數,也會在后臺調用Date.parse()方法,例如下面的代碼跟前面的是等價的。

//Tue May 25 2004 00:00:00 GMT+0800 (中國標準時間)
var someDate = new Date("May 25,2004"); 

這行代碼將會得到與前面一行相同的日期對象。

Date.UTC()方法
Date.UTC()同樣返回日期的毫秒數。但它與Date.parse()在構建值時使用的是不同的信息Date.UTC()的參數分別表示年份、基于0的月數(一月是0,二月是1,依次類推)、月中的哪一天(1到31)、小時數(0到23)、分鐘、秒、毫秒數。在這些參數中只有前兩個參數是必須的(年和月)。如果沒有提供月中的天數,則假設天數為1;如果省略其它參數,則統統假設為0,如下例子:

//GMT時間2000年1月1日午夜零時
var y2k = new Date(Date.UTC(2000,0));
console.log(y2k); //Sat Jan 01 2000 08:00:00 GMT+0800 (中國標準時間)

//GMT時間2005年5月5日下午5:55:55
var allFives = new Date(Date.UTC(2005,4,5,17,55,55));
console.log(allFives);//Fri May 06 2005 01:55:55 GMT+0800 (中國標準時間)

說明下:Greenwich Mean Time (GMT)格林尼治標準時間英國、愛爾蘭、冰島和葡萄牙屬于該時區。這個時區與中國北京時間的時差是8個小時,也就是說比北京時間晚8個小時。

Date構造函數
Date構造函數會模仿Date.UTC(),但有一點不同的是,日期和時間都是基于本地時區而非GMT來創建。不過他們的參數跟Date.UTC()的參數一樣。

例如:

//本地時間2000年1月1日午夜零時
var y2k = new Date(2000,0);
console.log(y2k); //Sat Jan 01 2000 00:00:00 GMT+0800 (中國標準時間)

//本地時間2005年5月5日下午5:55:55
var allFives = new Date(2005,4,5,17,55,55);
console.log(allFives);//Thu May 05 2005 17:55:55 GMT+0800 (中國標準時間)

給Date構造函數傳遞參數常使用如下幾種方式:(注:參數可以為整數; 也可以為字符串; 但格式必須正確)

new Date(2009,1,1); //正確

new Date("2009/1/1"); //正確

new Date("2009-1-1"); //不兼容,在谷歌下能解析,在IE瀏覽器9及以上結果為[date] Invalid
Date,IE8及以下結果為NAN。

說明:日期對象new Date()的參數形式如下:

1)new Date("month dd,yyyy hh:mm:ss");
2)new Date("month dd,yyyy");
3)new Date(yyyy,mth,dd,hh,mm,ss);
4)new Date(yyyy,mth,dd);
5)new Date(ms);

需要注意最后一種形式,參數表示的是需要創建的時間和 GMT時間1970年1月1日之間相差的毫秒數。各種函數的含義如下:

month:用英文 表示月份名稱,從January到December
mth:用整數表示月份,從0(1月)到11(12月)
dd:表示一個 月中的第幾天,從1到31
yyyy:四位數表示的年份
hh:小時數,從0(午夜)到23(晚11點)
mm: 分鐘數,從0到59的整數
ss:秒數,從0到59的整數
ms:毫秒數,為大于等于0的整數

例如:

new Date("January 12,2006 22:19:35"); 
new Date("January 12,2006"); 
new Date(2006,0,12,22,19,35); 
new Date(2006,0,12); 
new Date(1137075575000); 

上面的各種創建形式都表示2006年1月12日這一天。

Date.now()方法
ES5添加了Date.now()方法,返回表示這個方法時的日期和時間的毫秒數。這個方法簡化了使用Date對象分析代碼的工作,例如:

//取得開始時間
var start = Date.now();

//調用函數
dosomething();

//取得結束時間
var stop = Date.now(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log("打印結果");
}

支持Date.now()方法的瀏覽器包括IE9+,FireFox3+,Safari3+,Opera10.5+和Chrome。在不支持的其它瀏覽器,使用+操作符把Date對象轉成字符串,也可以達到相同的目的。

//取得開始時間
var start = +new Date();

//調用函數
dosomething();

//取得結束時間
var stop = +new Date(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log("打印結果");
}

那么就出來這么一個例子,JavaScript 獲取當前毫秒時間戳有以下幾種方法:

console.log(Date.parse(new Date()));    //結果:1494301186000//不推薦; 毫秒改成了000顯示
console.log((new Date()).valueOf());    //結果:1494301186175       
console.log(new Date().getTime());      //結果:1494301186175    
console.log(Date.now());                //結果:1494301186175
console.log(+new Date());               //結果:1494301186175

繼承的方法

與其它引用類型一樣,Date類型也重寫了toLocaleString()toString()valueOf()方法。

其中toLocaleString()toString()在顯示日期和時間沒有什么價值;而valueOf()方法不是返回的字符串,而是返回日期的毫秒表示。因此可以方便使用比較操作符(大于或小于)來比較日期值。如下面的例子:

var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
console.log(date1 < date2); //true
console.log(date1 > date2); //false
日期格式化方法

Date類型還有一些專門用于將日期格式化為字符串的方法,如下:

toDateString()——以特定于實現的格式顯示星期幾、月、日和年;

toTimeString()——以特定于實現的格式顯示時、分、秒和時區;

toLocaleDateString()——以特定與地區的格式顯示星期幾、月、日和年;

toLocaleTimeString()——以特定于實現的格式顯示時、分、秒;

toUTCString()——以特定于實現的格式完整的UTC日期。

與toLocaleString()和toString()方法一樣,以上這些字符串格式的方法輸出也是因瀏覽器而異的。因此沒有哪一個方法能夠用來在用戶界面上顯示一致的日期信息。

日期/時間組件方法

以下紅色標記為常用:

Date() 返回當日的日期和時間。
getDate() 從 Date 對象返回一個月中的某一天 (1 ~ 31)。
getDay() 從 Date 對象返回一周中的某一天 (0 ~ 6)。
getMonth() 從 Date 對象返回月份 (0 ~ 11)。
getFullYear() 從 Date 對象以四位數字返回年份。
getYear() 請使用 getFullYear() 方法代替。
getHours() 返回 Date 對象的小時 (0 ~ 23)。
getMinutes() 返回 Date 對象的分鐘 (0 ~ 59)。
getSeconds() 返回 Date 對象的秒數 (0 ~ 59)。
getMilliseconds() 返回 Date 對象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒數。
getTimezoneOffset() 返回本地時間與格林威治標準時間 (GMT) 的分鐘差。
getUTCDate() 根據世界時從 Date 對象返回月中的一天 (1 ~ 31)。
getUTCDay() 根據世界時從 Date 對象返回周中的一天 (0 ~ 6)。
getUTCMonth() 根據世界時從 Date 對象返回月份 (0 ~ 11)。
getUTCFullYear() 根據世界時從 Date 對象返回四位數的年份。
getUTCHours() 根據世界時返回 Date 對象的小時 (0 ~ 23)。
getUTCMinutes() 根據世界時返回 Date 對象的分鐘 (0 ~ 59)。
getUTCSeconds() 根據世界時返回 Date 對象的秒鐘 (0 ~ 59)。
getUTCMilliseconds() 根據世界時返回 Date 對象的毫秒(0 ~ 999)。
setDate() 設置 Date 對象中月的某一天 (1 ~ 31)。
setMonth() 設置 Date 對象中月份 (0 ~ 11)。
setFullYear() 設置 Date 對象中的年份(四位數字)。
setYear() 請使用 setFullYear() 方法代替。
setHours() 設置 Date 對象中的小時 (0 ~ 23)。
setMinutes() 設置 Date 對象中的分鐘 (0 ~ 59)。
setSeconds() 設置 Date 對象中的秒鐘 (0 ~ 59)。
setMilliseconds() 設置 Date 對象中的毫秒 (0 ~ 999)。
setTime() 以毫秒設置 Date 對象。
setUTCDate() 根據世界時設置 Date 對象中月份的一天 (1 ~ 31)。
setUTCMonth() 根據世界時設置 Date 對象中的月份 (0 ~ 11)。
setUTCFullYear() 根據世界時設置 Date 對象中的年份(四位數字)。
setUTCHours() 根據世界時設置 Date 對象中的小時 (0 ~ 23)。
setUTCMinutes() 根據世界時設置 Date 對象中的分鐘 (0 ~ 59)。
setUTCSeconds() 根據世界時設置 Date 對象中的秒鐘 (0 ~ 59)。
setUTCMilliseconds() 根據世界時設置 Date 對象中的毫秒 (0 ~ 999)。

調用方式:

var myDate = new Date();
myDate.getYear(); //獲取當前年份(2位)
myDate.getFullYear(); //獲取完整的年份(4位,1970-????)
myDate.getMonth(); //獲取當前月份(0-11,0代表1月)         // 所以獲取當前月份是myDate.getMonth()+1; 
myDate.getDate(); //獲取當前日(1-31)
myDate.getDay(); //獲取當前星期X(0-6,0代表星期天)
myDate.getTime(); //獲取當前時間(從1970.1.1開始的毫秒數)
myDate.getHours(); //獲取當前小時數(0-23)
myDate.getMinutes(); //獲取當前分鐘數(0-59)
myDate.getSeconds(); //獲取當前秒數(0-59)
myDate.getMilliseconds(); //獲取當前毫秒數(0-999)
簡單常用示例 1.獲取當前時間
function getNowTime() {
    return new Date();
}
2.時間與天數相加
function getTimeAddDays(time, days) {
    return new Date(time.getTime() + days * 24 * 60 * 60 * 1000);
}
3.獲取并格式化日期:年-月-日
function getFormatDate(time) {
   return time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
}
4.字符串轉換為日期,字符串格式:2011-11-20
function convertToDate(strings) {
    return new Date(Date.parse(strings.replace(/-/g, "/")));
}

或者:

function convertToDate(strings) {
    return new Date(strings.replace(/-/g, "/"));
}
5.獲取并格式化星期
// 計算系統當前是星期幾
var str = "今天是星期" + "日一二三四五六".charat(new Date().getDay());

可查看《JS進階篇--JS計算系統當前日期是星期幾的幾種方法》

6.時間比較
function compareTime(time1, time2) {
    return time1.getTime() - time2.getTime();
}
7.計算兩個日期之間相隔的天數
function getDays(time1, tiem2){
    var day = 24*60*60*1000;
    return (time1.getTime() - time2.getTime())/day;
}
擴展示例 1.JS判斷某年某月有多少天

JavaScript里面的new Date("xxxx/xx/xx")這個日期的構造方法有一個妙處,當你傳入的是"xxxx/xx/0"(0號)的話,得到的日期是"xx"月的前一個月的最后一天("xx"月的最大取值是69,題外話),如果傳入"1999/13/0",會得到"1998/12/31"。而且最大的好處是當你傳 入"xxxx/3/0",會得到xxxx年2月的最后一天,它會自動判斷當年是否是閏年來返回28或29,不用自己判斷,太方便了!!所以,我們想得到選 擇年選擇月有多少天的話,只需要

var d=new Date("選擇年/選擇月+1/0");
alert(d.getDate());

下面是使用Javascript編寫的獲取某年某月有多少天的getDaysInOneMonth(year, month)方法:

  function getDaysInOneMonth(year, month){  
     month = parseInt(month,10)+1;  
     var d= new Date(year+"/"+month+"/0");  
     return d.getDate();  
  } 

Chrome瀏覽器(谷歌瀏覽器)對這個特性不支持,得到的結果是NAN。兼容性問題啊!其原因就是非標準日期格式。

改成如下的格式就OK:

function getDaysInMonth(year,month){
  var month = parseInt(month,10);
  var temp = new Date(year,month,0);
  return temp.getDate();
}
console.log(getDaysInMonth(2017,2)); //28 
2.js獲取某年某月的哪些天是周六和周日
3.使用JavaScript生成一個倒數7天的數組

描述:

比如今天是10月1號,生成的數組是["9月25號","9月26號","9月27號","9月28號","9月29號","9月30號","10月1號"]。
這個難點就是需要判斷這個月份(可能還需要上一個月份)是30天還是31天,而且還有瑞年的2月28天或者29天。

方法一:
不需要那么復雜,在js中非常簡單,因為js的date對象是可以參與數學運算的!!!看下面的代碼:

var now = new Date("2012/3/2 12:00:00"); 
var s = "";
var i = 0;
while (i < 7) {
    s += now.getFullYear() + "/" + (now.getMonth() + 1) + "/" + now.getDate() + "
";
    
    // 這個是關鍵!!!減去一天的毫秒數效果就是把日期往前推一天
    now = new Date(now - 24 * 60 * 60 * 1000);
    i++;
}
console.log(s);

結果:

2017/6/2
2017/6/1
2017/5/31
2017/5/30
2017/5/29
2017/5/28
2017/5/27

方法二:
根據當前系統時間,來計算這個倒數7天的數組:

var now = new Date(); 
var s = "";
var i = 0;
while (i < 7) {
    s += now.getFullYear() + "/" + (now.getMonth() + 1) + "/" + now.getDate() + "
";
    
    // 這個是關鍵!!!減去一天的毫秒數效果就是把日期往前推一天
    now = new Date(now - 24 * 60 * 60 * 1000); 
    i++;
}
console.log(s);

結果:

2017/6/2
2017/6/1
2017/5/31
2017/5/30
2017/5/29
2017/5/28
2017/5/27

方法三:
用Date 的 setDate()方法

var today = new Date();
var curday = today.getFullYear() +"/" + Number(today.getMonth() + 1) +"/"+ today.getDate(); //2017/11/9
var dates = [curday];
for (var i = 1; i < 7; i++) {
    var d = new Date(today);
    d.setDate(d.getDate() - i);
       var ss = d.getFullYear() +"/" + Number(d.getMonth() + 1) +"/"+ d.getDate();
    dates.unshift(ss);
}
console.log(dates);

結果:
["2017/11/3", "2017/11/4", "2017/11/5", "2017/11/6", "2017/11/7", "2017/11/8", "2017/11/9"]

注:setDate() 方法用于設置一個月的某一天。
getDate() 方法可返回月份的某一天。
unshift() 方法可向數組的開頭添加一個或更多元素,并返回新的長度。

4.js獲取上一個月、下一個月格式為yyyy-mm-dd的日期
function GetMonthFun(){}

//date的日期格式為 yyyyy-mm-dd
GetMonthFun.prototype.getPrevMonth = function(date){
    var arr = date.split("-");
    var year = arr[0]; //獲取當前日期的年份
    var month = arr[1]; //獲取當前日期的月份
    var day = arr[2]; //獲取當前日期的日
    var days = new Date(year, month, 0);
    days = days.getDate(); //獲取當前日期中月的天數
    var year2 = year;
    var month2 = parseInt(month) - 1;
    if (month2 == 0) {
        year2 = parseInt(year2) - 1;
        month2 = 12;
    }
    var day2 = day;
    var days2 = new Date(year2, month2, 0);
    days2 = days2.getDate();
    if (day2 > days2) {
        day2 = days2;
    }
    if (month2 < 10) {
        month2 = "0" + month2;
    }
    var t2 = year2 + "-" + month2 + "-" + day2;
    return t2;
}

//date的日期格式為 yyyyy-mm-dd
GetMonthFun.prototype.getNextMonth = function(date){
    var arr = date.split("-");
    var year = arr[0]; //獲取當前日期的年份
    var month = arr[1]; //獲取當前日期的月份
    var day = arr[2]; //獲取當前日期的日
    var days = new Date(year, month, 0);
    days = days.getDate(); //獲取當前日期中的月的天數
    var year2 = year;
    var month2 = parseInt(month) + 1;
    if (month2 == 13) {
        year2 = parseInt(year2) + 1;
        month2 = 1;
    }
    var day2 = day;
    var days2 = new Date(year2, month2, 0);
    days2 = days2.getDate();
    if (day2 > days2) {
        day2 = days2;
    }
    if (month2 < 10) {
        month2 = "0" + month2;
    }

    var t2 = year2 + "-" + month2 + "-" + day2;
    return t2;
}

var dateObj = new GetMonthFun();
console.log(dateObj.getPrevMonth("2014-01-25")); //2013-12-25
console.log(dateObj.getNextMonth("2014-10-31")); //2014-11-30

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78021.html

相關文章

  • 【重溫基礎】7.時間對象

    摘要:本文是重溫基礎系列文章的第七篇。系列目錄復習資料資料整理個人整理重溫基礎語法和數據類型重溫基礎流程控制和錯誤處理重溫基礎循環和迭代重溫基礎函數重溫基礎表達式和運算符重溫基礎數字本章節復習的是中的時間對象,一些處理的方法。 本文是 重溫基礎 系列文章的第七篇。今日感受:做好自律。 系列目錄: 【復習資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎】1.語法和數據類型...

    YuboonaZhang 評論0 收藏0
  • 【連載】前端個人文章整理-從基礎到入門

    摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評論0 收藏0
  • js基礎--Date.parse()Date.getTime()方法詳解

    摘要:歡迎訪問我的個人博客前言這兩個方法的返回值都是午夜距離該日期時間的毫秒數如何使用下面的例子中,我們將取得從到的毫秒數的使用返回自定義時間戳返回當前時間的事件戳結果為的使用打印出來的是巧妙寫法返回值為返回值為返回值為以上這些方式都可以返回時間 歡迎訪問我的個人博客:http://www.xiaolongwu.cn 前言 這兩個方法的返回值都是 1970/1/1 午夜距離該日期時間的毫秒數...

    sumory 評論0 收藏0
  • dayjs 源碼解析(一)(api)

    摘要:下面,我將自己閱讀的源碼的過程記錄下來。閱讀庫的代碼,首先先要知道這個庫的作用是一個輕量的時間日期處理庫,其用法和完全一樣。介紹首先,閱讀的源碼,我們應該從的入手。對象是不可變的,即所有改變的操作都會返回一個新的實例。 前言 作為一個程序員,閱讀別人優秀代碼是提升自己技術能力的一個很好的方法。下面,我將自己閱讀 dayjs(v1.6.10)的源碼的過程記錄下來。 閱讀庫的代碼,首先先要...

    BlackMass 評論0 收藏0

發表評論

0條評論

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