У меня есть следующая функция, которую я написал пару лет назад. Это займет время от моего db и отображает его в лучшем форматированном виде.
function formatTime($dateTime){ // show time only if posted today if (date('Ymd') == date('Ymd', strtotime($dateTime))) { $dt = date('g:i a', strtotime($dateTime)); } else { // if not the same year show YEAR if (date('Y') == date('Y', strtotime($dateTime))) { $dt = date('M j', strtotime($dateTime)); } else { $dt = date('M j, Y', strtotime($dateTime)); } } return $dt; }
Я использую время сервера, для меня это CST. Вчера у меня появился пользователь из Австралии, указывающий на то, что для него это не было сделано с тех пор, как он двигался в совершенно другой часовой пояс, фактически на следующий день (по сравнению с моим выходом в определенное время :).
Я решил переписать свою функцию, чтобы сказать что-то вроде:
Есть ли какие-либо функции, которые вы, возможно, знаете об этом, если не так, как я могу изменить это?
Благодарю.
function formatTime ($dateTime) { // A Unix timestamp will definitely be required $dateTimeInt = strtotime($dateTime); // First we need to get the number of seconds ago this was $secondsAgo = time() - $dateTimeInt; // Now we decide what to do with it switch (TRUE) { case $secondsAgo < 60: // Less than a minute return "$secondsAgo seconds ago"; case $secondsAgo < 3600: // Less than an hour return floor($secondsAgo / 60)." minutes ago"; case $secondsAgo < 7200: // Less than 2 hours return "over an hour ago"; case $secondsAgo < 86400: // Less than 1 day return "1 day ago"; // This makes no sense, but it is what you have asked for... case $secondsAgo < (86400 * 7): // Less than 1 week return floor($secondsAgo / 86400)." days ago"; case $secondsAgo < (86400 * 28): // Less than 1 month - for the sake of argument let's call a month 28 days return floor($secondsAgo / (86400 * 7))." weeks ago"; case $secondsAgo < (86400 * 56): // Less than 2 months return "over a month ago"; default: return date('M j, Y', $dateTimeInt); } }
Это отнюдь не безупречно, тем более что одно из ваших требований не имеет смысла (см. Комментарии), но, надеюсь, оно должно дать вам толчок в правильном направлении и проиллюстрировать, как вы можете использовать switch
чтобы вы могли легко добавлять и удалять пунктов / вариантов поведения.