Дополнительно
Вычислить относительное время в C#
Учитывая конкретное значение DateTime
, как отобразить относительное время, например:
- 2 часа назад
- 3 дня назад
- месяц назад
1453
20
Джефф, ваш код хорош, но его можно было бы сделать более четким с помощью констант (как предлагается в Code Complete).
на jQuery.плагин timeago
Джефф, потому что переполнение стека использует jQuery, я рекомендую на jQuery.плагин timeago.
Преимущества:
Просто прикрепите его к вашей метки на дом готовы:
Это превратит всех элементов
сокр
с классом timeago и ИСО 8601 метка времени в заголовке:в что-то вроде этого:
что дает: 4 месяца назад. Как проходит время, время будет автоматически обновляться.
Disclaimer: я написал этот плагин, поэтому я'м предвзятым.
Вот как я это делаю
Я предпочитаю эту версию на свою лаконичность, и возможность добавления новых точек клеща. Это может быть инкапсулирован с расширением в
последний()
в TimeSpan, вместо этого длинные 1 вкладыш, но для краткости в проводке, это будет делать. Это исправляет час назад 1 час назад, предоставляя часа до 2 часовВот переписать из скрипта Джеффс для PHP:
http://refactormycode.com/codes/493-twitter-esque-relative-dates
В C# 6 версия:
Здесь'с реализацией я добавил в качестве расширения метода на datetime класс, который обрабатывает как будущее и прошлое даты и дает приближение опция, которая позволяет задать уровень детализации вы'вновь ищу (на"3 часа назад на" против "в 3 часа, 23 минуты, 12 секунд назад", у):
Я бы порекомендовал вычислений на стороне клиента тоже. Меньше работы для сервера.
Следующий вариант, который я использую (от Зака мультитул)
Есть также пакет сообщения пролей на NuGet и она на самом деле
Скотт Хансельман и рецензия на его блог
@jeff
ИМХО ваш вариант кажется немного длинным. Однако он кажется немного более надежным с поддержкой "вчера" и "года". Но по моему опыту, когда это используется, человек, скорее всего, просмотрит контент в первые 30 дней. После этого на сайт приходят только действительно увлеченные люди. Вот почему я обычно предпочитаю быть кратким и простым.
Этот метод я сейчас использую на одном из своих сайтов. Он возвращает только относительный день, час и время. А затем пользователь должен нажать на "ago" в выводе.
Пару лет опоздал на вечеринку, но у меня было требование, чтобы сделать это для обеих прошлых и будущих дат, поэтому я совместил [Джефф][1]'s и [Винсент'ы][2] в этом. Это'ы феерия ternarytastic! :)
Существует ли простой способ сделать это в Java? В
Ява.утиль.Класс date
представляется довольно ограниченным.Вот мой быстрый и грязный решение на Java:
для iPhone на Objective-C #версии
в <!-- язык-всем: Лэнг-КС --&ГТ; Учитывая мировой и ее муж представляется проводки примеры кода, вот что я писал некоторое время назад, исходя из этих ответов.
У меня особой необходимости в этом код будет локализовать. Так что у меня два класса — "грамматика", в котором указываются сроки локализовать и FuzzyDateExtensions, который держит кучу методов расширения. У меня нет необходимости иметь дело с будущей даты и время, поэтому не предпринимается никаких попыток, чтобы справиться с ними, используя этот код.
Я'вэ оставил некоторые из XMLdoc в источнике, но наиболее удалены (где они'd быть очевидно) для краткости'ы ради. Я'ве же не включенными каждого члена здесь класса:
В
FuzzyDateString
класса содержит:Одним из ключевых вещей, которые я хотел достичь, а также локализации, был, что "Сегодня", которая может только означать, что "этот день календаря" и других, поэтому IsToday
,
IsThisMonth,
IsThisYear` методы выглядят так:и методы округления, как это (я'ве включены RoundedMonths, а что'ы немного по-другому):
Я надеюсь, что люди найдут это полезным и/или интересным :о)
используя свободно Датавремя
В PHP, я делаю это так:
Я думал, что я'd не дайте этому выстрел, используя классы и полиморфизм. У меня был предыдущей итерации, которая используется суб-причислять, который закончил тем, что слишком много накладных расходов. Я'вэ перешел к более гибкой делегат / открытое свойство объекта модели, который значительно лучше. Мой код является немного более точным, я хотел бы придумать лучшего способа, чтобы создать и quot;Год назад" что это'т, кажется, слишком переусложненный.
Я думаю, что я'd по-прежнему придерживаться с Джеффом's Если-то каскад, потому что он's меньше кода и он'ы проще (он'ы наверняка легче убедиться, что он'будете работать, как ожидалось).
Для указанных ниже код PrintRelativeTime.GetRelativeTimeMessage(сроки давности) возвращает относительное время сообщения (например, что "вчера") смотрите.
вы можете попробовать это.Я думаю, что это будет правильно работать.
Когда вы знаете, зритель's зона может быть яснее, чтобы использовать календарных дней в дневном масштабе. Я'м не знакомы .Net библиотеки, так что я Дон'т знаю, как вы'd сделать это в C#, к сожалению.
На потребительских сайтах, вы также можете быть более волнистой меньше минуты. "по-меньше минуты назад" или "прямо сейчас" не может быть достаточно хорошим.
Такой же, как другой ответ на этот вопрос, а как способ расширения статический словарь.