Convert 2010-04-16 16:30:00 до «Tomorrow Afternoon» или конвертировать другую дату в «сегодня днем», «в следующем году», «на следующей неделе». Вы получите картину. Кто-нибудь знает библиотеку PHP или Javascript, которая может это сделать?
Я думаю, вы можете пройти долгий путь с тем, что сказано здесь: Рассчитать относительное время в C #
Логика есть, и это не слишком сложно сделать эквивалент javascript, если вам подходит решение на другом языке.
Там могут быть более элегантные решения (искать форматирование на естественном языке), но лично я не мог найти их.
Я бы предложил рассчитать расстояние 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
положителен или отрицателен.
Для утреннего, дневного, вечернего и т. Д. Вам нужно только проверить время дня в день, а также о том, какой тип форматирования вы нажмете, либо отобразить время как цифры (далеко), либо естественный язык (недавний или ближайший день) ).
Из этой ссылки -> Как рассчитать относительное время?
function posted(t) { var now = new Date(); var diff = parseInt((now.getTime() - Date.parse(t)) / 1000); if (diff < 60) { return 'less than a minute ago'; } else if (diff < 120) { return 'about a minute ago'; } else if (diff < (2700)) { return (parseInt(diff / 60)).toString() + ' minutes ago'; } else if (diff < (5400)) { return 'about an hour ago'; } else if (diff < (86400)) { return 'about ' + (parseInt(diff / 3600)).toString() + ' hours ago'; } else if (diff < (172800)) { return '1 day ago'; } else {return (parseInt(diff / 86400)).toString() + ' days ago'; }
}
function gett($sam){ $times = time() - $sam; if ($times == 60){ $times = "a minute ago"; } if (($times != 1) && ($times < 60) && ($times != 0)){ $times = "$times seconds ago"; } if ($times == 0){ $times = "less than a second ago"; } if ($times == 1){ $times = "a second ago"; } if ($times > 60 && $times < 3600){ $times = ceil($times/60)." minutes ago"; } if($times == 3600){ $times = "an hour ago"; } if($times > 3600 && $times < 86400){ $times = ceil($times/3600)." hours ago"; } if($times == 86400){ $times = "a day ago"; } if($times > 86400){ $times = ceil($times/86400)." days ago"; } return $times; }
Использование: $ updated = gett ($ timestamp); где $ timestamp довольно понятна.