首頁 > web前端 > js教程 > 主體

Js如何操作date對象

php中世界最好的语言
發布: 2017-12-02 10:30:42
原創
1472 人瀏覽過

Date在js中和Array類似,都是擁有自己的特殊方法的特殊物件。

  由於平常用到Date著實不多,對它的了解頗淺。上週被問到怎麼樣取得某年某個月的天數,我當時想了一會兒,回答說有兩種,一種自己寫判斷閏年的邏輯,每個月天數分兩種情況存數組,一種是利用js Date物件的特性(其實是他總結的...)。不過具體用到什麼特性我答不出來。現在既然想起來了,也學習總結一下好了。

  Date get和set系列

  (註:getTime()具體的參考時間為1970年1月1日8點0分0秒)

  所有的set對應都有get系列.

  值得注意的是所有的get和set都必須初始化一個實例並以實例的屬性方式呼叫。如:

  其實也很容易理解,畢竟要設定或回傳Date物件的值,肯定這個值得先存在啊。標準點的寫法是var date=new Date(2015,7,30);date.getDate()

  如果new Date()裡面沒有傳任何參數,也沒有用任何set系列方法,那麼就指的是目前的值(本地計算時鐘),包括時分秒。 js中可以很容易地用這個特徵來以任何形式顯示目前時間。

var date = new Date(),
    nowYear = date.getFullYear(),
    nowMonth = date.getMonth() + 1,  //注意getMonth从0开始,getDay()也是(此时0代表星期日)
    nowDay = date.getDate(),
    nowHour = date.getHours(),
    nowMinute = date.getMinutes(),
    nowSecond = date.getSeconds(),
    weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
    nowWeek = weekday[date.getDay()];
console.log(nowYear + '年' + nowMonth + '月' + nowDay + '日' + nowHour + '时' + nowMinute + '分' + nowSecond + '秒' + nowWeek);
登入後複製

  同樣,利用內建的 setInterval 或 setTimeout 回呼自身的方法,可以很容易的做時鐘效果。

  首先是每個物件都有的valueOf()(得到真實值)和toString()(得到字串形式表示值)。注意紅色框內的不同。

  toTimeString() :將Date物件時間部分轉換為字串並傳回,因此必須有時間參數,必須有實例,

  toDateString() :將Date物件的日期部分轉換為字串並返回,必須有實例。

  parse() : 傳回1970年1月1日8點整到指定日期(字串)的毫秒數,精確到秒。只能用Date.parse(Date實例)的形式呼叫。 (注意比較getTime(),精確到毫秒。)

  toSource() : 傳回原始碼。

  註:toLocaleString:根據本地時間格式,將Date物件轉換為字串,與UTC,GMT對應,在Array和在Date中這個方法都已經過時,就不再糾結。 UTC系列用得很少,也就是格式有所不同.

  重要知識點小結

  set系列的參數討論

  setFullYear()前三個參數有用,時分秒還是本地的~~~

    其它set系列都只有第一個參數有用,返回值分別為在new Date()(當前時間)的基礎上加上了Month/Date/Minutes *對應的第一個參數。

    設定完整時間

  很明顯setTime也是set系列,故而只是在原來的基礎上增加了1992毫秒(顯示為1s)。由於setTime比較特殊,是以1970年1月1日早上8點( FF、Chrome、IE5+、Opera (safari用得少就沒測) 中測試,雖然w3School中說是0點,但是測試一下new Date( 1970,0,1,8,0,0).getTime()顯示為0就很明顯了)為基準開始算的,因此在實際執行前其實date實例已經不是new Date()所對應的當前時間了,而是有一個被轉換為基準時間的過程。所以顯示的為1970,0,1,8,0,1。若將1992改為5000則為1970,0,1,8,0,5。

  而設定完整時間的方法,為new Date物件的時候傳入需要設定的時間的參數。可以為1992,10,3,10,2,50 (還可以加上毫秒級,然後用getTime()檢測出來,但是一般用不上) 的數字形式(表示1992年11月3日10時2分50秒),也可以為標準字串格式(但一般不會這麼寫吧~~~)。

    getDate()
登入後複製

  一般放在後面就是用來壓軸用的,嘿嘿。

  作為get系列,除了參數的個數有些講究之外,參數的取值也是很有講究的。先回答最初的問題,得到某年某個月的最大天數(可以理解為判斷閏年~)。

new Date(2014,2,0).getDate();     //返回2014年2月份的最后一天(28)
登入後複製

  當第三個參數為0的時候,其實是返回上一個月的最後一天(注意月份的數字2實際上是三月份,故而代碼是返回2月份的最後一天在當月中的序號)。看更多例子

複製程式碼

new Date(2014,1,30).getDate();     //返回2014年3月2日在3月份中的天数(2)
new Date(2014,2,-1).getDate();     //返回2014年2月份的倒数第二天(27)
登入後複製

//當參數缺少的時候顯示1

new Date(2014,8).getDate(); 
new Date(14,18).getDate(); 
new Date(180).getDate();
登入後複製

//當參數多餘的時候多餘的不起作用(並沒有設定arguments[3+]的操作)

new Date(2015,2,0,2).getDate();
登入後複製

複製代碼

#  天數多了會自動往下月計算,天數為負數則往上個月計算。參數少了有問題,多了的話多的部分沒作用。對比其它的set系列其實也差不多就是這麼個實現的思路,看(2)就知道了。

      類似new Date('xxxx/xx/xx xx:xx:xx') 形式的時間物件在IOS 和Andriod 系統上都可以被正確的識別,而類似new Date('xxxx-xx- xx xx:xx:xx') 形式的時間物件在ios 系統上無法被正確的識別,需要做一層轉換。

function parseDate(dateStr) {
  if (!dateStr) {
    return new Date();
  }
 
  if (dateStr.indexOf('/') > -1) {
    return new Date(dateStr);
  } else {
    return new Date(dateStr.replace(/-/g, '/'));
  }
}
登入後複製

相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

相關閱讀:

CSS的文字字體顏色如何設定

css裡的font文字怎麼設定

#CSS裡的盒子模型的種類差異

#

以上是Js如何操作date對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!