Конвертировать 2010-04-16 16:30:00 в "Завтра днем" - PullRequest
3 голосов
/ 15 апреля 2010

Преобразование 16.04.2010 16:30:00 в «Завтра днем» или преобразование другой даты в «сегодня днем», «следующий год», «среда следующей недели». Вы получаете картину. Кто-нибудь знает библиотеку PHP или Javascript, которая может это сделать?

Ответы [ 4 ]

4 голосов
/ 15 апреля 2010

Я думаю, вы можете пройти долгий путь с тем, что здесь сказано: Рассчитайте относительное время в C #
Логика есть, и не так уж сложно сделать эквивалент javascript, если вам подходит решение на другом языке.

1 голос
/ 15 апреля 2010

Там могут быть более элегантные решения (ищите форматирование на естественном языке), но лично я не смог найти ни одного.

Я бы предложил рассчитать расстояние от 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 положительным или отрицательным.

Для утра, дня, вечера и т. Д. Вам нужно только проверить время суток в дате, а также в отношении типа форматирования, который вы нажали, отображать время в виде чисел (далеко) или на естественном языке (последние или около даты).

0 голосов
/ 15 апреля 2010
                   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 довольно понятен ..

0 голосов
/ 15 апреля 2010

По этой ссылке -> Как рассчитать относительное время?

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'; } 

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...