1. 程式人生 > >Date日期時間相關

Date日期時間相關

sep console 我們 時區 偏差 val subst ie9 oda

  最近在封裝一個關於時間函數的功能時,竟發現這些最基本的函數都有些生疏,於是進來來總結復習下,鞏固自己記憶的同時,希望能幫助到需要的人   首先了解下日期對象相關的方法
var date = new Date();// 使用new+構造函數Date創建一個對象
console.log(date); // date內部相當於默認的調用了toString(): Tue Sep 19 2017 08:54:04 GMT+0800 (中國標準時間)
console.log(date.toString()); // Tue Sep 19 2017 08:54:04 GMT+0800 (中國標準時間)
console.log(date.toDateString()); //
外國的的顯示方式: Tue Sep 19 2017 console.log(date.toLocaleDateString()); // 年月日 : 2017/9/19 console.log(date.toTimeString()); // 外國人喜歡看的方式: 08:54:04 GMT+0800 (中國標準時間) console.log(date.toLocaleTimeString()); //國內喜歡看的方式: 上午8:54:04

  看到這裏是不是覺得太多而且類似不好記,其實並不用全部記住,只要記住new Date()就行,其他的等用到的時候看看就行。下面我們就這個方法展開:

// 1.註意:在用new Date()創建對象的時候傳入的是2016,10,1,而打印的結果是11月,這是因為日期格式的月份是從0開始的,10自然就代表11月了。
  //
日期格式的月份是從0開始的,即0-11位1-12月, var date = new Date(2016,10,1); console.log(date); // Tue Nov 01 2016 00:00:00 GMT+0800 (中國標準時間)

// 2.看看這次傳入的對象,估計很多人已然會覺得會打印11月,如果這樣想你就錯了,這裏傳入的是字符串,與上面的不一樣,該方法會將字符串中的內容轉化成相應的月份。要註意與上面的分開哦 // 註意這種字符串形式的和上面從number類型的不一樣,這裏的月份就是對於的1-12 var date = new Date("2016-10-1"); //正常的輸出 10月1號 console.log(date); //
Sat Oct 01 2016 00:00:00 GMT+0800 (中國標準時間)

// 3.現在我們來聊聊時間戳,別被這個名詞給忽悠住了,其實他就是時間的毫秒形式,也就是從格林威治時間到現在的毫秒數

 // 下面5種方法都可以得到時間戳,估計很多人不樂意了,這怎麽記得住,沒關系,只要記住常用的就行。如:Date.now() 和 new Date("1970-1-1").getTime(),一個是當前時間,一個是任意時間 var date = Date.parse("2016-10-1"); var date = new Date("1970-1-1 0:0:0").getTime() // 註意打印這個結果是-28800000,剛好偏差了8小時,要註意時區的概念,背景時間應該是1970.1.1 8;00才為0的 console.log(date);//1475251200000 13位的毫秒形式 1970 1 1 00:00:00:000 // 日期的本質就是13位的毫秒數字 這樣的好處是為了便於計算 var date = +new Date(); // 獲取當前的13位數字表示的時間 console.log(date); // 1505784006569 var date = Date.now(); //HTML5擴展的 IE9+ console.log(date); // 1505784030664 var date = new Date(); console.log(date.valueOf());//打印對象的原來的值,其實就是13位的數字 1505784077460

  獲取日期時間的指定部分

  /**
   getTime()  返回毫秒數和valueOf()結果一樣
   getMilliseconds()
   getSeconds()  返回0-59
   getMinutes()  返回0-59
   getHours()   返回0-23
   getDay()     返回星期幾 0周日   6周6
   getDate()    返回當前月的第幾天,當月的幾號
   getMonth()   返回月份,從0開始
   getFullYear()   返回4位的年份  如 2016

   */
  var date = new Date();
  console.log(date.getTime()); // 和valueOf的效果是一樣的,用來獲取13位的毫秒數字
  console.log(date.getMilliseconds());
  console.log(date.getSeconds());
  console.log(date.getMinutes());
  console.log(date.getHours());
  console.log(date.getDay());  // 星期幾   周   禮拜幾
  console.log(date.getDate()); //  當前月份的第幾天  幾號
  console.log(date.getMonth()); //顯示的是1,因為這裏也是從0開始
  console.log(date.getFullYear());

  熟悉這些API後,讓我們封裝一個常見的日期格式函數來練練手吧(非常常見的筆試題目哦,看到了就是賺到了)

  function getDate(date) {
    var year = date.getFullYear();
    var month = date.getMonth() + 1; // 月份是從0開始
    var day = date.getDate();//獲取的是當月的幾號
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = month < 10 ? "0" + month : month;
    day = day < 10 ? "0" + day : day;
    hour = hour < 10 ? "0" + hour : hour;
    min = min < 10 ? "0" + min : min;
    sec = sec < 10 ? "0" + sec : sec;
    var str = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec;
    console.log(str);
  }
  var date = new Date();
  getDate(date); // 把創建的date作為參數傳進來

  最後再來看看一個關於日期時間的bug。萬惡的IE一直是前端學習的噩夢,各種兼容,今天的主角依然是他。以往的兼容是由於IE的版本比價底的緣故,這也難怪,早期的他並沒有想的那麽全面。可是這個bug知道IE11都還有,我就不知道該說什麽了,

可能某些人存在店大欺客的味道,就象ICBC(愛存不存)一樣,你愛用不用。那我們就來看看是什麽,以及怎麽解決吧!

  在IE11之前(包括IE11,但是edge是可以識別的)都是不識別這種橫杠模式的時間,如:new Date("1970-1-1 0:0:0"),一定要轉化成斜杠才能識別new Date("1970/1/1 0:0:0"),因此在使用前必須通過正則去替換:replace(new RegExp("-","gm"),"/");,

順帶普及下string的replace方法。replace(regexp/substr,replacement)是字符串函數,第一個參數是要替換的字符或者正則模式匹配的字符串,第二個參數則是替換文本或生產替換文本的函數

  看完後,是不是對這些API思路更清晰了

Date日期時間相關