關於js中的時間處理


關於js編程, 主要是, 絕大部分是用 jquery. 但是, js原生的一些方法和屬性也是要掌握的, 這個只是在 遇到的時候, 記一下就好了, 如:

 event的relatedTarget屬性: 主要就是針對 mouseout和 mouseover而言的, 返回跟這個事件 相關的 dom元素, mouseout會返回被 進入的dom元素, mouseover會返回被 離開的元素:

$("p").mouseover(function(e){

    alert(e.relatedTarget.nodeName);  // 這個nameode就是js原生的屬性名稱
});

時間處理都是 使用 Date這個對象來進行的

參考文章:
http://www.w3school.com.cn/jsref/jsref_getYear.asp
http://zhidao.baidu.com/question/1511589589724354140.html?qbl=relate_question_0

http://www.68idc.cn/help/makewebs/javascript/20150809489876.html

Date , 單獨的, 大寫首字母 的話, 是一個對象; 小寫的話, 放在一個單詞的后面, 表示一個方法: getDate(): 獲取一個月中的數字,1~31.

時間對象, 也不是 總是用 var date, 要根據你的 實際場合,和 語義意義, 來命名, 如: var exam_date = new Date(); var born = new Date(..);

Date對象的初始化:

  1. 總是使用 new Date([init-param]), 來創建 初始化一個 日期對象的, 如同 Array, Object等對象一樣, 總是使用 "構造函數"來創建對象的.

  2. 構造函數由多個, 可以有多種初始化方式:

    • 不帶初始化 參數的, 表示默認的用 當前的/現在的/代碼執行時的時間(包括日期+時間)來初始化;
    • 用 時間戳變量或 時間戳 字面量(一個整數) 來初始化; 用 日期/時間 格式的參數來 初始化: ` var dateobj = new Date(123456); = new Date("2016-01-02 12:00:00");
    • **計算某個時間點/時間段的 年數: **
  3. Date的屬性和方法:
    Date的屬性, 一般很少用: 包括

    • constructor, 這個屬性, (提高效力是最重要的, 可以包括 漢字, pinyin, english, 再也不熬夜了10點必睡). 實際上是返回的構造函數的類型:Date var d = new Date(); if(d.constructor == Date) alert("...)

    • prototype: 原型, 感覺是對 一個類的 引用: **prototype 應該是和 instance 相對應的, 由一個類 實例化 一個對象時, 叫instance, 而由一個對象如dateobject, 反推去 獲得這個對象的類 的時候, 就是prototype, 用 a_class_object.prototype 獲得的就是 the_class **. suoyi, 用dateobject.prototype就獲得了Date類, 然后就可以向這個類中 添加 方法和屬性!

    • 現在, sihu 就可以明白$.prototype.extend的含義了: 原型的目的和作用, 是"用來擴展類的 屬性和方法" 是指, 當我們在定義 一個類的時候, 可能沒有事先定義這個類的 某些 方法和屬性, 或者 你不能, 無法預見到這個類 應該有 哪些方法和屬性, (有時候, 你也不能 總是 去修改 這個類 , 這個類已經投入使用了), 或者干脆就是 類的設計者 就賦予了 這個類 具有某種 擴展功能, 如 jQuery, jiu是這樣, 你可以 通過jQuery.prototype 來獲得jquery這個類, 然后你可以擴展 自己的 jquery方法和屬性....

    • Date類的方法: 這個方法主要分為兩類, 一類是獲得時間/日期的函數, 一類是設置的函數, 主要是記住 獲取 的函數就好了, 設置的值是改變成 set就號了..

      函數名 功能    
      getYear() 獲取四位數的年份
      getMonth() 獲取2位數的月數, 這個是從 0 開始的 , 注意 不是從1 開始的!!!
      getDate() 獲取2位數的日 數, 也是從1 開始的
      getDay() 獲取表示 星期的數字, 注意星期天返回的是0, ...
      getHours() 獲取小時數...
      getMinites() ...
      getSeconds() ...
      **getTime() 獲取dateobject 到 1970年 1月1日 0點0時0分 的毫秒數
      ** valueOf() 反過來,獲取日期對象的毫秒數
      ** Date.parse() 反過來, 獲取...毫秒數
      轉換成字符串的函數 ...
      toString() 全部轉變成 字符串...
      toDateString() 只轉變日期字符串
      toTimeString() 只轉變時間字符串
    • day和date的區別: 老美說, day是指的 星期幾, date是指的幾號, what's the day today? (the day是指發生重大事件的歷史上的哪一天...) *** 圖片本身要求頂格寫, 但是圖片的前面不能加空行, 否則會切斷 前面的 排序 模式, 因為 頂格+ 空行 兩個條件 一起滿足的時候, 就打斷前面的模式....***

  4. 使用function 來定義一個類? 這個函數 默認就可以作為 類的構造函數?

js 處理日期的例子:


這里如果用 getYear, 會返回 116年.. 因為, getYear是從1990年 開始算的, 所以 是 2016-1990 = 116 年, getYear明確的說被禁用了, 應該使用 getFullYear()....

要記住getMonth 跟 getDay一樣, 也是從 0 開始的, 所以 getMonth的 月份數, 也要 +1, 加1.

** 沒有ff的js調試器, 寫js真的是一場噩夢, 很難找到 js的錯誤: 在定義 js的類的時候, 凡是 類中 的 屬性和 成員方法, 的定義, 它是一個語句, 所以一定要在語句的后面, 加上分號; 否則會出錯的! 下面的32行, 是定義 一個函數construct, (初始化構造函數),是一個語句, 所以 "並不是所有的 大括號后面都不加分號, 要看它是語句還是 結構. **
下面會報錯: construct函數 沒有定義:

所以在32行后面加上 分號, 就可以了:

????? 同樣會報錯: construct函數沒有定義? 說明, 在js類的里面, 只要是 "私有"變量, 都可誒直接refer, 而公有變量, 不管是定義還是 調用/使用都要加this/

最后總結

關於用函數來定義一個類, 又是一個很長的話題: 參考這篇文章: http://www.cnblogs.com/lidabo/archive/2011/12/17/2291238.html, 講得很好, 很透徹:

如文中所言, js不支持面向對象編程, 也沒有class關鍵字, 沒有繼承extends或:, 沒有虛擬函數virtual. 但是可以 實現/"模擬"類的使用和功能, 這個叫做: "偽類"
如何定義一個類, 沒有關鍵字class, 用什么了?  **用function! **
    在js中, 總的類 根是 : Object, 而Function 是繼承自 Object的, 而 function 函數是Function類的實例. 因此 在 js中, 是用 function 來定義一個類的. 你可以把 這個 "function" 關鍵字, 就看作是"class" 關鍵字. 或zhe把 function ...就看作是類的 構造函數.

在"類"中, 私有的屬性和方法, 使用 var來定義, (如同在函數中定義 變量一樣, var 是函數內部的變量, 不寫var則是全局變量, 這個跟 類的這個情況也是類似的), 全局屬性和方法, 使用this來定義.

**js類也可以有 構造函數. 外面的那個 function JsClass 應該看成是類名, 在類里面, 定義一個函數, init(...), 然后在類里面 調用一次這個init()方法. 這樣, 在每一次 初始化一個類的對象時,就會自動去執行這個init方法, 可以把這個init方法就看成是類JsClass的構造函數, 也可以將它命名為 constructor, 里面就對 類的 私有變量 進行初始化 賦值.**

類的靜態方法和靜態屬性:  放在類定義的 外面, 使用 類名.屬性名=...  類名.方法名=function()...., 類名.方法名(para1, para2...)= function(para1, para2...)..., 后面就用類名來引用靜態方法和屬性..

類中的成員方法 要訪問 類的自己的變量, 不像c/java等,可以直接訪問, 這個 居然也分 "私有還是共有", 如果是私有成員屬性, 直接寫, 如果是公有屬性, 加this...


這里明確的說到了: 用function來 代替class (等同於) 來定義一個類.

實例化一個類, 可以在類名前加上一個 a, 表示一個...

保留this到私有成員變量中: var _this=this;


喜歡 熟悉上js, php這樣的動態語言了. js和php的函數原型 聲明中會 "提示"變量的類型, 只是在函數原型的聲明中, 實際在定義和調用/引用/reference時,都不會指定類型符. 動態語言, 靈活: 聲明時靈活, 直接, 變量的類型是由 賦值 或 表達式 或context 來決定的; 而且可以自動實現 隱式 轉換. js和php的編程基本上是相通的,一樣的...


關於時間的處理和規定

時間的標准在各行各業很多, 在編程中用的較多的是 utc和gmt:
utc: universal time coordinated. (協調世界時 ), 是由 美國的 國際無線電咨詢委員會規定並推薦的.
gmt, 也叫ut0. 也叫 世界時, utc是在 世界時的前面 加上"協調"
utc和gmt, 相差0.9s, 中間用 閏秒 來控制

關於日期和時間的 格式的 標准化表示:
日期和時間 可以用分隔符-和:, 也可以不用分隔符; 年用四位數字, 日月用兩位數字,不足的補零; 時間用24小時制, 兩位數字表示, 不足的補零
2014年2月3日: 2014-02-03, 20140203(不用斜線分隔, 可能是因為斜線 / 在系統中表示目錄分隔符 或 其他系統表示意義, 在程序中不好處理的原因..?)
14點13分03秒: 14:13:03, 141303.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM