Вопрос заключается в том, как отформатировать JavaScript Date
в виде строки с указанием прошедшего времени, аналогично тому, как вы видите время, отображаемое в переполнении стека.
например
- 1 минуту назад
- 1 час назад
- 1 день назад
- 1 месяц назад
- 1 год назад
javascript
date-formatting
Скай Сандерс
источник
источник
Intl.RelativeTimeFormat.prototype.format()
.Ответы:
источник
В этом случае это может быть излишним, но если возможность показывает moment.js , просто потрясающе!
Moment.js - это библиотека даты и времени javascript, чтобы использовать ее для такого сценария:
http://momentjs.com/docs/#/displaying/fromnow/
Приложение 2018 года : Luxon - это новая современная библиотека, на которую стоит обратить внимание!
источник
Я не проверял (хотя это не сложно), но я думаю, что сайты Stack Exchange используют
jquery.timeago
плагин для создания этих временных строк .Плагин довольно прост в использовании, он чистый и обновляется автоматически.
Вот быстрый пример (с домашней страницы плагина):
источник
Это покажет вам прошлые и предыдущие форматы времени, такие как «2 дня назад», «10 минут спустя», и вы можете передать его как объект Date, числовую метку времени или строку даты
источник
return time;
на,format = time_formats[time_formats.length - 1]; return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
чтобы вернуть века для больших промежутков времени вместо миллисекунд.Вот небольшая модификация решения Sky Sander, которая позволяет вводить дату в виде строки и отображать промежутки, например, «1 минута» вместо «73 секунд».
источник
interval = Math.floor(seconds / 60);
. Я добавилinterval = seconds;
в финал,else
и он отлично работает.let seconds = Math.floor((+new Date() - date) / 1000);
interval === 0
в последнемif
?Возможно, вы захотите взглянуть на humanized_time_span: https://github.com/layam/js_humanized_time_span
Это независимый от фреймворка и полностью настраиваемый.
Просто скачайте / включите скрипт, и тогда вы можете сделать это:
или даже это:
Прочитайте документы для получения дополнительной информации.
источник
NaN years ago
почему ??humanized_time_span("2011/05/11 12:00:00")
Изменил функцию выше на
В противном случае он будет отображать такие вещи, как «75 минут» (от 1 до 2 часов). Также теперь предполагается, что вводимая дата является меткой времени Unix.
источник
Много читаемого и кроссбраузерно-совместимого кода:
По словам @Travis
источник
Более короткая версия, используемая Lokely :
источник
Infinity seconds ago
с этого момента unix timestamp param,
источник
Версия кода ES6, предоставленная @ user1012181
Отредактировано с предложениями @ ibe-vanmeenen. (Спасибо !)
источник
Простая и читаемая версия:
источник
Я пишу один с js и python, используемый в двух проектах, очень красивый и простой: простая библиотека (менее 2 КБ), используемая для форматирования даты с помощью
*** time ago
оператора.простой, маленький, простой в использовании и хорошо проверенный.
npm install timeago.js
import timeago from 'timeago.js'; // or use script tag
используйте API
format
.Образец:
Также вы можете сделать в режиме реального времени.
источник
import { format, render, cancel, register } from 'timeago.js';
Хотя вопрос задавался довольно давно, написание этого ответа с надеждой поможет кому-то.
Передайте дату, с которой вы хотите начать считать. Использование
moment().fromNow()
в momentjs : (см больше информации здесь )Если вы хотите изменить информацию, предоставленную для дат, отныне вы пишете свое собственное относительное время для момента.
Например, в моем собственном случае я хотел печатать
'one month ago'
вместо'a month ago'
( предоставленный моментом (d) .fromNow () ). В этом случае вы можете написать что-то приведенное ниже.ПРИМЕЧАНИЕ : я написал свой код для проекта в Agular 6
источник
Можно также использовать dayjs relativeTime плагин для решения этой проблемы.
источник
Это должно правильно обрабатывать любую допустимую метку времени, включая Date.now (), единичные единицы и будущие даты. Я пропустил месяцы, но их было легко добавить. Я старался сделать его читабельным, насколько это возможно.
источник
Я изменил версию Sky Sanders. Операции Math.floor (...) оцениваются в блоке if
источник
return days + "1 day ago";
должна бытьreturn "1 day ago";
источник
источник
Мое решение ..
источник
Мой удар в этом основан на других ответах.
источник
Я искал ответ на этот вопрос и почти внедрил одно из этих решений, но коллега напомнил мне проверить
react-intl
библиотеку, так как мы уже использовали ее.Таким образом, добавляя к решениям ... в случае, если вы используете
react-intl
библиотеку, у них есть<FormattedRelative>
компонент для этого.https://github.com/yahoo/react-intl/wiki/Components#formattedrelative
источник
Вот что я сделал (объект возвращает единицу времени вместе со своим значением):
источник