我們在項目中經常會有獲取當前時間的地方;下面了解一下js怎么獲取和設置時間吧!
首先我們先了解日期和時間的一些概念:
1.1 GMT時間
? GMT(Greenwich mean time 格林尼治標準時間,格林威治標準時間,格林尼治平均時間):是指位于英國倫敦郊區(qū)的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那里的經線。自1924年2月5日開始,格林尼治天文臺每隔一小時會向全世界發(fā)放調時信息。世界上發(fā)生的重大時間都是以格林尼治時間時間為標準的。
比如:我們用的北京時間,因為北京是東八區(qū),所以我們的事件比GMT事件早八個小時。我們這里是8點早上,格林威治還是夜里0點呢。
1.2 UTC時間
? UTC(Coordinated Universal Time 協調世界時間) 協調世界時是以原子時秒長為基礎,在時刻上盡量接近于世界時的一種時間計量系統。
? 原子時與以往的計時系統不同,它非常精確并且不以某地的平均太陽時為基準,但是遇有地球自轉速度不均勻,原子時與世界時之間的時差便日積月累,因 此,UTC 會在一段時期后加上正或負的閏秒來補償。因此協調世界時與國際原子時(TAI) 之間會出現若干整數秒的差別。位于巴黎的國際地球自轉事務中央局(ERS)負責決定何時加入閏秒。
二、創(chuàng)建日期對象
JavaScript中的 Date 類型是在早期 Java 中的 java.util.Date 類基礎上構建的。為此, Date類型使用自 UTC 1970 年 1 月 1 日午夜(零時)開始經過的毫秒數來保存日期。在使用這種數據存儲格式的條件下, Date 類型保存的日期能夠精確到 1970 年 1月 1 日之前或之后的 285 616 年。
2.1 獲取當前日期字符串形式
直接調用Date()函數(注意首字母大寫)。返回的是表示當前日期和時間的字符串。傳參數無效,所以不需要傳入參數。
注意:得到的僅僅是個String類型的字符串
<body>
<script type="text/javascript">
var date = Date();
alert(date);
</script>
</body>

2.2 創(chuàng)建日期對象
2.2.1 創(chuàng)建表示當前表示當前日期的對象
new Date()
<body>
<script type="text/javascript">
//使用關鍵字new 調用Date()構造函數,創(chuàng)建的對象表示當前日期
var now = new Date();
alert(now);
</script>
</body>
2.2.2 創(chuàng)建指定字符串日期對象
new Date("字符串格式日期")
支持格式1:英文月 日,年 時:分:秒 例如:May 23, 2016 09:00:00
支持格式2:年-月-日 例如:2016-11-11
支持格式3:年/月/日 例如:2016/11/11
<body>
<script type="text/javascript">
var d1 = new Date("May 31, 2016 09:00:00");
console.log(d1); //Tue May 31 2016 09:00:00 GMT+0800 (中國標準時間)
var d2 = new Date("2016-11-12");
console.log(d2); //Sat Nov 12 2016 08:00:00 GMT+0800 (中國標準時間)
var d3 = new Date("2016/11/12");
console.log(d3); //Sat Nov 12 2016 08:00:00 GMT+0800 (中國標準時間)
</script>
</body>
2.2.3 創(chuàng)建指定毫秒值的日期對象
new Date(指定的毫秒值)
這個毫秒值是指的從1970年1月1日0:0:0開始算的毫秒值
<body>
<script type="text/javascript">
var d1 = new Date(1646464646646);
console.log(d1); // Sat Mar 05 2022 15:17:26 GMT+0800 (中國標準時間)
var d2 = new Date(1000 * 60 * 60 * 72);
console.log(d2); //Sun Jan 04 1970 08:00:00 GMT+0800 (中國標準時間)
</script>
</body>
2.2.4 通過參數傳入年月日時分秒來創(chuàng)建日期對象
newDate(年, 月[, 日, 時, 分, 秒])
注意:
- 年月必須有,日時分秒可以省略。(1日,0分,0秒)
- 月份的范圍是0-11. 0表示1月份。
- 如果設置的月日分秒超過了范圍,則自動進行增減操作。例如:如果一個月只有31天,你如果傳入32,則自動調整為下個月的1號。
<body>
<script type="text/javascript">
var d1 = new Date(2016, 11, 31);
console.log(d1); //Sat Dec 31 2016 00:00:00 GMT+0800 (中國標準時間)
var d2 = new Date(2016, 11, 33);
console.log(d2); //Mon Jan 02 2017 00:00:00 GMT+0800 (中國標準時間)
</script>
</body>
三、日期繼承的3個方法
3.1 toString()方法
toString()方法一般返回帶有時區(qū)信息的日期和時間。
備注:我們直接輸出一個日期對象的時候,就相當于調用了toString()方法再輸出
3.2 toLocalString() 方法
toLocalString()返回符合本地習慣的日期和時間格式
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.toLocaleString()); // 2016/11/9 上午11:28:01 注意:不同的瀏覽器有差異
</script>
</body>
3.3 valueOf()方法
valueOf()方法不返回字符串,而是返回的代表這個時間的毫秒值。
一般用用來比較兩個日期的大小,就知道誰在前誰在后了。
==日期早的小于日期晚的。==
例如:2016年11年11日是小于2016年11月12日的
<body>
<script type="text/javascript">
var d1 = new Date("2016-11-20");
var d2 = new Date("2016-11-22");
console.log(d1 < d2); //true
console.log(d1 > d2); //false
console.log(d1 - d2); // 間隔的毫秒值:-172800000
</script>
</body>
四、Date對象的常用方法
4.1 getTime()和setTime(毫秒值)
getTime()返回表示日期的毫秒值,與valueOf()一樣
setTime(毫秒值) 以毫秒數設置日期,會改變整個日期
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getTime()); //1478667185681
date.setTime(979797979879879);
console.log(date.toLocaleString());//33018/7/25 下午5:31:19
</script>
</body>
4.2 getFullYear()和setFullYear(年份)
getFullYear() 取得4位數的年份
setFullYear()設置日期的年份,必須是4為數字的年份,否則將來獲取的年份是不對的。
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getFullYear());
date.setFullYear(2018);
console.log(date.toLocaleString());
</script>
</body>
4.3 getMonth()和setMonth(月份)
getMonth()取得月份。 范圍:0-11
setMonth(月份) 設置月份
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getMonth()); //如果是11月份則返回 10
date.setMonth(2); // 設置月份為3月
console.log(date.toLocaleString());
</script>
</body>
4.4 getDate()和setDate(日)
getDate() 獲取一個月中的第幾天(1-31)
setDate(日) 設置一個月中的第幾天
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getDate());
date.setDate(11);
console.log(date.toLocaleString());
</script>
</body
4.5 getDay()
getDay() 獲取是星期幾 0代表星期日 6代表星期6
注意:沒有setDay()的方法
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getDay());
</script>
</body>
4.6 getHours()和setHours(小時)
getHours() 獲取小時數(0-23)
setHours(小時) 設置小時數 如果設置的值超過23則更改月份中的日期,小于0則減少日期數
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getHours());
date.setHours(10);
console.log(date.toLocaleString());
</script>
</body>
4.7 getMinutes() 和setMinutes(分鐘)
getMinutes() 獲取分鐘數(0-59)
setMinutes(分鐘) 設置分鐘數 如果超過60或小于0則自動增加小時
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getMinutes());
date.setMinutes(62);
console.log(date.toLocaleString());
</script>
</body>
4.8 getSeconds()和setSeconds(秒)
getSeconds() 獲取秒數 0-59
setSeconds(秒數) 設置秒數 如果超過60或小于0,則自動增減分鐘數
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getSeconds());
date.setSeconds(62);
console.log(date.toLocaleString());
</script>
</body>
4.9 getMilliSeconds()和setMilliSeconds(毫秒值)
getMilliSeconds() 獲取毫秒值 0-999
setMilliSeconds(毫秒值) 設置毫秒值
<body>
<script type="text/javascript">
var date = new Date();
console.log(date.getMilliseconds());
date.setMilliseconds(999);
console.log(date.toLocaleString());
</script>
</body>
五、 日期格式化方法
- toDateString() ——以特定于實現的格式顯示星期幾、月、日和年;
- toTimeString() ——以特定于實現的格式顯示時、分、秒和時區(qū);
- toLocaleDateString() ——以特定于地區(qū)的格式顯示星期幾、月、日和年;
- toLocaleTimeString() ——以特定于實現的格式顯示時、分、秒;
- toUTCString() ——以特定于實現的格式完整的 UTC 日期。
是不是感覺東西很多,別著急其實都是有規(guī)律的;不需要死記硬背,找到規(guī)律理解記憶就好了;