在 Javascript 中将毫秒转换为时间戳“Time Ago”(59m、5d、3m 等)

Dre*_*res -1 javascript date

我看过一些使用 PHP 的示例,但我遇到了一些问题,因为我对 PHP 不太熟悉并且时间有限。

我想创建一个时间戳,根据帖子创建的时间,它会显示不同的时间戳。

这就是我要的:

  • 如果帖子创建时间不到一秒,则显示:<1m;

  • 如果帖子是在 1-59 分钟前创建的,则显示://# 分钟// + "m";

  • 如果帖子创建时间小于 1-24 小时,则显示: //# of hours // + "h";

  • 如果帖子是在 1-6 天前创建的,则显示: //# of days // + "d";

  • 如果帖子是在 1-3 周前创建的,则显示://周数//+“w”;

  • 如果帖子是在 1-12 个月前创建的,则显示: //# of Months// + "m";

这是我尝试使用的代码:

function formatTime(timeCreated){


  var periods = ["second", "minute", "hour", "day", "week", "month", "year", "decade"];
  // var actualPeriods = ["m", "h", "d", "w", "m", "y"]
  var lengths = ["60","60","24","7","4.35","12","10"]
  var currentTime = Date.now()
  var difference = currentTime - timeCreated;

  for (var i = 0; difference >= lengths[i] && i < (lengths.length)-1; i++) {
    difference = difference /lengths[i];
  }


  difference = Math.round(difference)

  return difference + periods[i]
}
Run Code Online (Sandbox Code Playgroud)

formatTime(1508189037313)正在返回74year

(1508189037313 是 2017 年 10 月 16 日星期一 16:23:57)

我看到一个在 PHP 中使用它的例子

function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}
Run Code Online (Sandbox Code Playgroud)

但不知道如何转换->=>转换为 javascript。

任何帮助,将不胜感激。谢谢你!

Jam*_*mes 6

创建一些结构来存储各个周期的毫秒数,从 Date.now() 中减去您感兴趣的日期,构建一个 if 结构检查以查看差异是否大于周期的断点(从最大到最小) - 然后格式化某种输出。如果没有匹配的内容,您可以返回一些内容,表明它是最近超过一分钟的。

请注意,您使用的分钟和月份符号是相同的。

var periods = {
  month: 30 * 24 * 60 * 60 * 1000,
  week: 7 * 24 * 60 * 60 * 1000,
  day: 24 * 60 * 60 * 1000,
  hour: 60 * 60 * 1000,
  minute: 60 * 1000
};

function formatTime(timeCreated) {
  var diff = Date.now() - timeCreated;

  if (diff > periods.month) {
    // it was at least a month ago
    return Math.floor(diff / periods.month) + "m";
  } else if (diff > periods.week) {
    return Math.floor(diff / periods.week) + "w";
  } else if (diff > periods.day) {
    return Math.floor(diff / periods.day) + "d";
  } else if (diff > periods.hour) {
    return Math.floor(diff / periods.hour) + "h";
  } else if (diff > periods.minute) {
    return Math.floor(diff / periods.minute) + "m";
  }
  return "Just now";
}
console.log(formatTime(Date.now()));
console.log(formatTime(1510507151026));
console.log(formatTime(1510517051026));
console.log(formatTime(1508189037313));
Run Code Online (Sandbox Code Playgroud)