Angular中關於時間的操做總結

建立時間

使用new Date(),能夠看見有5種構造函數

new Date()

console.log(new Date()); // 當前時間
    console.log(new Date('2015-08-12 12:30'));// 字符串
    console.log(new Date(12345679));//時間戳
    console.log(new Date(2018, 3, 20, 12, 30));//指定年月日等

結果

若是要建立一個時間爲當日的日期不包含時間的值
console.log(new Date(new Date().toLocaleDateString()));

結果

時間計算

一般能夠轉換成時間戳的方式進行計算
const endTime = new Date(new Date().toLocaleDateString());
    let d = endTime.valueOf(); // 時間戳
    d -= 7 * 24 * 60 * 60 * 1000;
    const startTime = new Date(d);
    console.log(startTime);
    console.log(endTime);
    console.log(d);

image.png

時間轉換

自身仍是有不少方法能夠使用的

console.log(new Date().toTimeString());
    console.log(new Date().toLocaleDateString());
    console.log(new Date().toDateString());
    console.log(new Date().getTime());

和想要的有點不同

Angular 自帶的時間管道

<p>如今的時間是{{today | date:'yyyy-MM-dd HH:mm:ss'}}</p>

image.png

第三方插件

moment.jsnode

這是一個很強大的時間插件,這裏用一個應用場景來演示。

nodejs上的時間和我本地的時間老是相差8個小時,這致使我每次發送時間到後臺時,nodejs將時間轉化成字符串傳送出去的時候老是和我服務器上的時間相差8小時。
node上顯示出來時間
node上時間
本地系統顯示時間
本地時間
發送前控制檯打印出來
發送前控制檯打印出來瀏覽器

瀏覽器網絡中監測顯示
瀏覽器網絡中監測顯示服務器

解決方案

nodejs只有在發送時間類型的數據時會進行轉換,致使相差8個小時,可是我發送前就將其轉換成字符串,就不會形成這樣的結果了。
因此對angular的http進行封裝,在發送前將body中的時間類型轉換成字符串類型網絡

post(url: string, body?: any, params?: any,headers?:any) {
        this.begin();
        return this.http
            .post(url, this.parseBody(body) || null, {
                headers:this.parseHeaders(headers),
                params: this.parseParams(params)
            })
    }
  parseBody(body: any) {
    if (body) {
      for (const key in body) {
        if (body[key]) {
          const _data = body[key];
          // 將時間轉化爲字符串
          if (moment.isDate(_data)) {
            body[key] = moment(_data).format('YYYY-MM-DD HH:mm:ss');
          }
        }
      }
    }
    return body;
  }

完美解決

其中用到了moment.js 的兩個方法,一個時判斷是否時時間類型moment.isDate(_data)另外一個時轉換成字符串moment(_data).format('YYYY-MM-DD HH:mm:ss');
關於更多用法能夠參考官網函數

相關文章
相關標籤/搜索