Там могут быть более элегантные решения (ищите форматирование на естественном языке), но лично я не смог найти ни одного.
Я бы предложил рассчитать расстояние от now
до даты, которую вы форматируете, и использовать пороговые значения.
Псевдо-решение:
diff = now - date
if (diff < one_day)
format for today
if (diff < two_days)
format for tomorrow
if (diff < one_week)
format using days from now
.
.
.
Сравнение будет работать как для прошлых, так и для будущих дат, если вы используете сравнение со значением abs
, равным diff
. Отобразите время назад или время, проверяя, является ли diff
положительным или отрицательным.
Для утра, дня, вечера и т. Д. Вам нужно только проверить время суток в дате, а также в отношении типа форматирования, который вы нажали, отображать время в виде чисел (далеко) или на естественном языке (последние или около даты).