在Web開發(fā)過程中,處理時間戳是很常見的事情。我們經(jīng)常需要將時間戳轉(zhuǎn)換為人類可讀形式的日期時間。但是,有時候我們需要將時間戳轉(zhuǎn)換為周期,比如將一個時間戳轉(zhuǎn)換為“剛剛”,“5分鐘前”,“昨天”或者“1周前”這樣的描述。本文將介紹如何使用JavaScript來實現(xiàn)時間戳和周期之間的轉(zhuǎn)換。
首先,我們需要了解時間戳是什么。時間戳是Unix操作系統(tǒng)中的一個術(shù)語,表示從1970年1月1日0時0分0秒(UTC時間)起經(jīng)過的秒數(shù)。JavaScript使用與Unix相同的時間戳表示方式,即將時間戳存儲為自1970年1月1日以來經(jīng)過的毫秒數(shù)。
let timestamp = 1622592000000; // 2021年6月2日0時0分0秒的時間戳(毫秒數(shù))
現(xiàn)在,我們來編寫一個函數(shù),將時間戳轉(zhuǎn)換為周期。我們以秒為單位處理時間,因為人們更常使用秒來描述時間間隔。
function timestampToPeriod(timestamp) {
const now = new Date().getTime() / 1000; // 當前時間(秒數(shù))
const seconds = now - timestamp / 1000; // 與當前時間的時間差(秒數(shù))
if (seconds< 60) {
return "剛剛";
} else if (seconds< 60 * 60) {
return Math.floor(seconds / 60) + "分鐘前";
} else if (seconds< 60 * 60 * 24) {
return Math.floor(seconds / (60 * 60)) + "小時前";
} else if (seconds< 60 * 60 * 24 * 7) {
return Math.floor(seconds / (60 * 60 * 24)) + "天前";
} else {
const date = new Date(timestamp);
return date.getFullYear() + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日";
}
}
console.log(timestampToPeriod(1622678400000)); // 2天前
console.log(timestampToPeriod(1622232000000)); // 5天前
console.log(timestampToPeriod(1621376160000)); // 17天前
console.log(timestampToPeriod(1595318400000)); // 2020年7月22日
上面的代碼中,我們使用了Date對象來將時間戳轉(zhuǎn)換為人類可讀形式的日期。當時間戳距離當前時間大于7天時,我們返回一個完整的日期形式(例如“2021年6月3日”)。
對于不同的時間周期,我們使用不同的描述方式。當時間差小于1分鐘時,我們返回“剛剛”;當時間差小于1小時時,我們返回“x分鐘前”;當時間差小于1天時,我們返回“x小時前”;當時間差小于1周時,我們返回“x天前”。
使用上面的函數(shù),我們可以將時間戳轉(zhuǎn)換為易于理解的時間周期。如果我們真的需要使用時間周期,而不是精確的日期和時間,請考慮使用上面的代碼。