創(chuàng)建時間
使用new Date(),可以看見有5種構(gòu)造函數(shù)

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

結(jié)果
如果要創(chuàng)建一個時間為當(dāng)日的日期不包含時間的值
console.log(new Date(new Date().toLocaleDateString()));

結(jié)果
時間計(jì)算
通??梢赞D(zhuǎn)換成時間戳的方式進(jìn)行計(jì)算
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
時間轉(zhuǎn)換

自身還是有很多方法可以使用的
console.log(new Date().toTimeString());
console.log(new Date().toLocaleDateString());
console.log(new Date().toDateString());
console.log(new Date().getTime());

和想要的有點(diǎn)不一樣
Angular 自帶的時間管道
<p>現(xiàn)在的時間是{{today | date:'yyyy-MM-dd HH:mm:ss'}}</p>

image.png
第三方插件
moment.js
這是一個很強(qiáng)大的時間插件,這里用一個應(yīng)用場景來演示。
nodejs上的時間和我本地的時間總是相差8個小時,這導(dǎo)致我每次發(fā)送時間到后臺時,nodejs將時間轉(zhuǎn)化成字符串傳送出去的時候總是和我服務(wù)器上的時間相差8小時。
node上顯示出來時間

node上時間
本地系統(tǒng)顯示時間

本地時間
發(fā)送前控制臺打印出來

發(fā)送前控制臺打印出來
瀏覽器網(wǎng)絡(luò)中監(jiān)測顯示

瀏覽器網(wǎng)絡(luò)中監(jiān)測顯示
解決方案
nodejs只有在發(fā)送時間類型的數(shù)據(jù)時會進(jìn)行轉(zhuǎn)換,導(dǎo)致相差8個小時,但是我發(fā)送前就將其轉(zhuǎn)換成字符串,就不會造成這樣的結(jié)果了。
所以對angular的http進(jìn)行封裝,在發(fā)送前將body中的時間類型轉(zhuǎn)換成字符串類型
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];
// 將時間轉(zhuǎn)化為字符串
if (moment.isDate(_data)) {
body[key] = moment(_data).format('YYYY-MM-DD HH:mm:ss');
}
}
}
}
return body;
}

完美解決
其中用到了moment.js 的兩個方法,一個時判斷是否時時間類型moment.isDate(_data)另一個時轉(zhuǎn)換成字符串moment(_data).format('YYYY-MM-DD HH:mm:ss');
關(guān)于更多用法可以參考官網(wǎng)