将时间以距今多久的形式表示,PHP,js双版本


PHP 版本:


<?php
// 当前时间戳
$now = time();

// 给定的时间字符串
$givenTime = strtotime("2024-08-08 09:39:59");

// 计算时间差
$diff = $now - $givenTime;

// 转换时间差为可读格式
$readableDiff = "";

if ($diff < 60) {
    $readableDiff = $diff . " 秒前";
} elseif ($diff < 3600) {
    $readableDiff = round($diff / 60) . " 分钟前";
} elseif ($diff < 86400) {
    $readableDiff = round($diff / 3600) . " 小时前";
} else {
    $days = round($diff / 86400);
    $readableDiff = $days . " 天前";
}

echo $readableDiff;
?>

JavaScript 版本:


// 当前时间
const now = new Date();

// 给定的时间字符串
const givenTime = new Date("2024-08-08T09:39:59");

// 计算时间差(毫秒)
const diff = now - givenTime;

// 转换时间差为可读格式
let readableDiff = "";

if (diff < 1000 * 60) {
    readableDiff = `${Math.floor(diff / 1000)} 秒前`;
} else if (diff < 1000 * 60 * 60) {
    readableDiff = `${Math.floor(diff / (1000 * 60))} 分钟前`;
} else if (diff < 1000 * 60 * 60 * 24) {
    readableDiff = `${Math.floor(diff / (1000 * 60 * 60))} 小时前`;
} else {
    const days = Math.floor(diff / (1000 * 60 * 60 * 24));
    readableDiff = `${days} 天前`;
}

console.log(readableDiff);

注意:这里的时间差计算是简化的,没有考虑时区差异,如果需要考虑时区,则需要对给定的时间字符串进行适当的处理。同时,对于“秒前”的转换,我直接使用了整数除法,这可能会导致在刚好跨过一个时间单位(如秒转分钟)时,显示的时间差有轻微的误差。对于大多数应用场景,这种误差是可以接受的。