# Date 對象常用操作
## 時間格式
<span style="font-size: 20px;">GMT(格林尼治平時)</span>
Greenwich Mean Time,GMT 是指位于英國倫敦郊區的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那里的經線。
由于地球每天的自轉是有些不規則的,而且正在緩慢減速,因此格林尼治時間已經不再被作為標準時間使用。現在的標準時間,是由原子鐘報時的協調世界時(UTC)。
所以我們也從 MDN 上的文檔看到對于`toGMTString()`的解釋是:
> Returns a string representing the Date based on the GMT (UT) time zone. Use toUTCString() instead.
<span style="font-size: 20px;">UTC(世界標準時間)</span>
協調世界時,又稱世界標準時間或世界協調時間,簡稱UTC(從英文「Coordinated Universal Time」/法文「Temps Universel Cordonné」而來),是最主要的世界時間標準,其以原子時秒長為基礎,在時刻上盡量接近于格林尼治平時
<span style="font-size: 20px;">CST(北京時間)</span>
北京時間,China Standard Time,中國標準時間。在時區劃分上,屬東八區,比協調世界時早 8 小時,記為 UTC+8。
不過這個 CST 這個縮寫比較糾結的是它可以同時代表四個不同的時間:
* Central Standard Time (USA) UT-6:00
* Central Standard Time (Australia) UT+9:30
* China Standard Time UT+8:00
* Cuba Standard Time UT-4:00
因此使用 CST 可能上傳時間給后端可能會存在一些 [問題](https://www.cnblogs.com/sanshi/archive/2009/08/28/1555717.html)
所以前端傳時間給后端盡量使用 UTC。
## 時間戳
時間戳是指格林威治時間 1970 年 01 月 01 日 00 時 00 分 00 秒(北京時間 1970 年 01 月 01 日 08 時 00 分 00 秒)起至現在的秒數。(定義上是秒,JS 方法獲取的是毫秒)
```js
var d = new Date()
console.log(d.getTime() + " milliseconds since 1970/01/01") // 1564904334582 milliseconds since 1970/01/01
// Date 對象的 valueOf() 方法返回毫秒級時間戳
console.log(d.valueOf()) // 1564904334582
```
## 時間戳轉日期
```
Date.prototype.Format = function(fmt)
{
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小時
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
}
if(/(y+)/.test(fmt))
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length))
for(let k in o)
if(new RegExp("("+ k +")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)))
return fmt
}
```
使用
```
function getTime (timeStamp) {
return new Date(timeStamp * 1000).Format('yyyy-MM-dd hh:mm')
}
```
## 將 Date 對象轉換為字符串
```js
console.log(new Date()) // Sun Aug 04 2019 15:55:40 GMT+0800 (中國標準時間)
console.log(new Date().toTimeString()) // 15:55:40 GMT+0800 (中國標準時間)
console.log(new Date().toDateString()) // Sun Aug 04 2019
console.log(new Date().toUTCString()) // Sun, 04 Aug 2019 07:55:40 GMT
console.log(new Date().toLocaleString()) // 2019/8/4 下午3:55:40
console.log(new Date().toLocaleTimeString()) // 下午3:55:40
console.log(new Date().toLocaleDateString()) // 2019/8/4
/**
* toTimeString() 方法可把 Date 對象的時間部分轉換為字符串,并返回結果。
* toDateString() 方法可把 Date 對象的日期部分轉換為字符串,并返回結果。
* toUTCString() 方法可根據世界時 (UTC) 把 Date 對象轉換為字符串,并返回結果。
* toLocaleString() 方法可根據本地時間把 Date 對象轉換為字符串,并返回結果。
* toLocaleTimeString() 方法可根據本地時間把 Date 對象的時間部分轉換為字符串,并返回結果。
* toLocaleDateString() 方法可根據本地時間把 Date 對象的日期部分轉換為字符串,并返回結果。
*/
```
# Math 方法
| 方法 | 描述 |
| :----| :---- |
|floor(x)| 對數進行下舍入|
|ceil(x) |對數進行上舍入|
|round(x) |把數四舍五入為最接近的整數|
|random() |返回 [0~1) 之間的隨機數|
|max(x,y)| 返回 x 和 y 中的最高值,可以傳入多個參數|
|min(x,y)| 返回 x 和 y 中的最低值|
|abs(x)| 返回數的絕對值|
|pow(x,y) |返回 x 的 y 次冪|
|sqrt(x) |返回數的平方根|
|sin(x) |返回數的正弦|
|cos(x) |返回數的余弦|
|tan(x)| 返回角的正切|
|acos(x)| 返回數的反余弦值|
|asin(x) |返回數的反正弦值|
|atan(x) |以介于 -PI/2 與 PI/2 弧度之間的數值來返回 x 的反正切值|
|atan2(y,x) |返回從 x 軸到點 (x,y) 的角度(介于 -PI/2 與 PI/2 弧度之間)|
|exp(x) |返回 e 的指數|
|log(x)| 返回數的自然對數(底為e)|
# 參考鏈接
[https://www.w3school.com.cn/jsref/jsref\_obj\_date.asp](https://www.w3school.com.cn/jsref/jsref_obj_date.asp)
[https://www.jb51.net/article/84563.htm](https://www.jb51.net/article/84563.htm)
[https://github.com/lishengzxc/bblog/issues/5](https://github.com/lishengzxc/bblog/issues/5)
[https://www.cnblogs.com/sanshi/archive/2009/08/28/1555717.html](https://www.cnblogs.com/sanshi/archive/2009/08/28/1555717.html)
- 序言 & 更新日志
- H5
- Canvas
- 序言
- Part1-直線、矩形、多邊形
- Part2-曲線圖形
- Part3-線條操作
- Part4-文本操作
- Part5-圖像操作
- Part6-變形操作
- Part7-像素操作
- Part8-漸變與陰影
- Part9-路徑與狀態
- Part10-物理動畫
- Part11-邊界檢測
- Part12-碰撞檢測
- Part13-用戶交互
- Part14-高級動畫
- CSS
- SCSS
- codePen
- 速查表
- 面試題
- 《CSS Secrets》
- SVG
- 移動端適配
- 濾鏡(filter)的使用
- JS
- 基礎概念
- 作用域、作用域鏈、閉包
- this
- 原型與繼承
- 數組、字符串、Map、Set方法整理
- 垃圾回收機制
- DOM
- BOM
- 事件循環
- 嚴格模式
- 正則表達式
- ES6部分
- 設計模式
- AJAX
- 模塊化
- 讀冴羽博客筆記
- 第一部分總結-深入JS系列
- 第二部分總結-專題系列
- 第三部分總結-ES6系列
- 網絡請求中的數據類型
- 事件
- 表單
- 函數式編程
- Tips
- JS-Coding
- Framework
- Vue
- 書寫規范
- 基礎
- vue-router & vuex
- 深入淺出 Vue
- 響應式原理及其他
- new Vue 發生了什么
- 組件化
- 編譯流程
- Vue Router
- Vuex
- 前端路由的簡單實現
- React
- 基礎
- 書寫規范
- Redux & react-router
- immutable.js
- CSS 管理
- React 16新特性-Fiber 與 Hook
- 《深入淺出React和Redux》筆記
- 前半部分
- 后半部分
- react-transition-group
- Vue 與 React 的對比
- 工程化與架構
- Hybird
- React Native
- 新手上路
- 內置組件
- 常用插件
- 問題記錄
- Echarts
- 基礎
- Electron
- 序言
- 配置 Electron 開發環境 & 基礎概念
- React + TypeScript 仿 Antd
- TypeScript 基礎
- React + ts
- 樣式設計
- 組件測試
- 圖標解決方案
- Storybook 的使用
- Input 組件
- 在線 mock server
- 打包與發布
- Algorithm
- 排序算法及常見問題
- 劍指 offer
- 動態規劃
- DataStruct
- 概述
- 樹
- 鏈表
- Network
- Performance
- Webpack
- PWA
- Browser
- Safety
- 微信小程序
- mpvue 課程實戰記錄
- 服務器
- 操作系統基礎知識
- Linux
- Nginx
- redis
- node.js
- 基礎及原生模塊
- express框架
- node.js操作數據庫
- 《深入淺出 node.js》筆記
- 前半部分
- 后半部分
- 數據庫
- SQL
- 面試題收集
- 智力題
- 面試題精選1
- 面試題精選2
- 問答篇
- 2025面試題收集
- Other
- markdown 書寫
- Git
- LaTex 常用命令
- Bugs