時間戳,通俗來說就是記錄某個事件發生時的時間,以數字方式表示。在前端開發中,我們經常需要獲取當前時間戳或將普通時間格式轉化成時間戳格式。JS作為一門重要的前端語言,在這個方面也有着強大的表現能力。
一、JS獲取當前時間戳
獲取當前時間戳可以使用JS內置對象Date,其getTime()方法可以返回距離1970年1月1日00:00:00 UTC(國際協調時間)的毫秒數,除以1000即可得到當前時間戳。
const timestamp = Math.floor(Date.now() / 1000);
console.log(timestamp);
以上代碼中,Math對象中的floor()方法用於向下取整,確保時間戳為整數。
二、JS將普通時間格式轉成時間戳
將普通時間格式轉換成時間戳也可以使用Date對象的相關方法。我們可以首先將時間格式轉換成Date對象,然後再調用getTime()方法即可得到對應時間的時間戳。
以下是一個將普通時間格式(如”2019-07-01 00:00:00″)轉換成時間戳的示例:
const dateStr = '2019-07-01 00:00:00';
const timestamp = Math.floor(new Date(dateStr).getTime() / 1000);
console.log(timestamp);
三、JS對時間戳進行格式化展示
方式1:手寫方法實現格式化
手寫方法實現的方式一般可以通過自定義函數來實現。下面我們將時間戳轉換成”YYYY-MM-DD hh:mm:ss”的格式:
function formatTimestamp(timestamp) {
const dateObj = new Date(timestamp * 1000);
const year = dateObj.getFullYear();
const month = (`0${dateObj.getMonth() + 1}`).slice(-2);
const day = (`0${dateObj.getDate()}`).slice(-2);
const hours = (`0${dateObj.getHours()}`).slice(-2);
const minutes = (`0${dateObj.getMinutes()}`).slice(-2);
const seconds = (`0${dateObj.getSeconds()}`).slice(-2);
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
const timestamp = 1561939200;
console.log(formatTimestamp(timestamp));
以上代碼中,我們首先通過new Date()方法將時間戳轉換成Date對象,然後使用Date對象自帶的方法獲取對應的年、月、日、時、分、秒,最後再使用字符串模板的方式生成格式化後的時間字符串。
方式2:使用第三方庫moment.js實現格式化
moment.js是一個時間處理的優秀庫,非常受前端開發者的喜歡。它不僅可以格式化時間,還可以進行各種時間的計算和顯示。
要使用moment.js進行時間格式化,需要先使用npm或者直接引入moment.js庫。下面是一個使用moment.js將時間戳轉化成”YYYY-MM-DD hh:mm:ss”格式的示例:
import moment from 'moment';
const timestamp = 1561939200;
console.log(moment(timestamp * 1000).format('YYYY-MM-DD hh:mm:ss'));
四、JS實現倒計時功能
倒計時功能在各種場景下都有非常廣泛的使用。直接使用Date對象和setInterval()函數即可輕鬆實現倒計時功能。以下是一個從當前時間開始倒計時10秒的示例:
function countDown(second) {
let remain = second;
const timer = setInterval(function() {
if (remain <= 0) {
clearInterval(timer);
console.log('倒計時結束!');
} else {
console.log(`距離倒計時結束還剩${remain}秒!`);
remain--;
}
}, 1000);
}
countDown(10);
以上代碼中,我們定義了一個countDown()函數,傳入倒計時時長(單位為秒),然後在定時器中每秒更新剩餘時間,當剩餘時間為0時,清除定時器並輸出提示信息。
五、JS實現時間戳與Date對象的轉換
時間戳與Date對象之間的相互轉換也是前端開發中非常常見的需求。以下是一個將時間戳轉換成Date對象以及將Date對象轉換成時間戳的示例:
function timestampToDate(timestamp) {
return new Date(timestamp * 1000);
}
function dateToTimestamp(dateObj) {
return Math.floor(dateObj.getTime() / 1000);
}
const timestamp = 1561939200;
const dateObj = timestampToDate(timestamp);
console.log(dateObj);
console.log(dateToTimestamp(dateObj));
以上代碼中,我們分別定義了兩個函數,其中timestampToDate()函數將時間戳轉換成Date對象,dateToTimestamp()函數將Date對象轉換成時間戳。使用時只需傳入對應的參數即可。
六、JS實現延時執行功能
在前端開發中,我們常常需要需要實現某個操作的延時執行,這時候可以使用JS內置函數setTimeout()來實現。以下是一個延時3秒後彈出提示框的示例:
setTimeout(function() {
alert('3秒之後彈出提示框!');
}, 3000);
以上代碼中,我們使用setTimeout()函數實現了一個延時3秒後執行的操作。該函數接收兩個參數,第一個參數是要執行的函數(可以使用匿名函數),第二個參數是延遲的毫秒數。
七、JS實現定時執行功能
與setTimeout()函數類似,JS還提供了一個函數setInterval()可以實現定時執行某個函數。
以下是一個每隔1秒鐘就執行一次的定時器示例:
setInterval(function() {
console.log('每隔1秒鐘就會執行一次!');
}, 1000);
以上代碼中,我們使用setInterval()函數實現了一個每隔1秒鐘執行一次的操作。該函數也接收兩個參數,第一個參數是要執行的函數(可以使用匿名函數),第二個參數是間隔的毫秒數。
八、JS生成指定區間範圍內的隨機數
在前端開發中,生成指定區間範圍內的隨機數也是非常常見的需求。可以使用Math對象的相關函數輕鬆實現。
以下是一個生成1~10之間的隨機整數的示例:
const randomNum = Math.floor(Math.random() * 10) + 1;
console.log(randomNum);
以上代碼中,我們使用Math.random()函數獲取0~1之間的隨機數,使用Math.floor()函數向下取整,將小數位去除,並加1保證生成的是1~10之間的整數。
九、JS實現時間日期的加減運算
在日期和時間的處理中,加減運算也是日常開發中常用的操作。可以使用Date對象中的相關方法實現。
以下是一個日期加1天、減2天、加1個月、減2個月、加1年、減2年的示例:
const dateObj = new Date();
console.log(dateObj);
dateObj.setDate(dateObj.getDate() + 1);
console.log(dateObj);
dateObj.setDate(dateObj.getDate() - 2);
console.log(dateObj);
dateObj.setMonth(dateObj.getMonth() + 1);
console.log(dateObj);
dateObj.setMonth(dateObj.getMonth() - 2);
console.log(dateObj);
dateObj.setFullYear(dateObj.getFullYear() + 1);
console.log(dateObj);
dateObj.setFullYear(dateObj.getFullYear() - 2);
console.log(dateObj);
以上代碼中,我們首先定義了一個Date對象,然後使用setDate()、setMonth()、setFullYear()方法進行日期加減運算,最後輸出修改後的Date對象。
總結
本文從多個角度詳細闡述了JS生成時間戳及相關操作的實現,內容包含了JS獲取當前時間戳、將普通時間格式轉成時間戳、JS對時間戳進行格式化展示、JS實現倒計時功能、JS實現時間戳與Date對象的轉換、JS實現延時執行功能、JS實現定時執行功能、JS生成指定區間範圍內的隨機數、JS實現時間日期的加減運算等方面。希望能夠對前端開發者們有所幫助。
原創文章,作者:PYRMO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/333293.html