Timeago дает мне неправильное количество времени

#php #jquery #timeago

#php #jquery #timeago

Вопрос:

Я пытаюсь использовать timeago для отображения того, как давно было выполнено действие на моем веб-сайте.

Я использую ajax-запрос для добавления строк в таблицу, а затем, как только все строки будут добавлены, я снова активирую timeago. У меня есть вызываемая функция fill_table() , которая собирает некоторые данные строк из php-скрипта, а затем перебирает данные, добавляя строки в таблицу.

 function fill_table() {
    $.ajax({
        ...
        success : function(data) { 
            var table = $('#table_body');
            table.empty();
            $.each(data, function( index, value ) {

                var date = new Date(new Date(value.last_updates).toLocaleString("en-US", {timeZone: "America/Chicago"})).toISOString();

                var elem = '
                    <tr>
                        <td><a target="_blank" href="'   value.name   '">'   value.name   '</a></td>
                        <td>'   value.market_value   '</td>
                        <td>'   value.lowest_cost   '</td>
                        <td>'   value.biggest_md_format   '</td>
                        <td><time class="timeago" datetime="'   date   '"></time></td>
                    </tr>
                ';
                table.append(elem);
            });
            $("time.timeago").timeago();                
        },
        error : function(request,error)
        {
            console.log("Request: " JSON.stringify(request));
        }
    });
}
  

Теперь, по какой-то причине, это говорит мне «6 часов назад» для временных меток, которым должно быть не более 8-12 минут.

Как вы можете видеть в коде, я объявил, date используя какую-то сумасшедшую штуку с toLocaleString, просто чтобы убедиться, что это правильный часовой пояс, я также уже установил заголовок PHP в моем контроллере

 date_default_timezone_set('America/Chicago');
  

Проверка элемента timeago дает мне следующее

 <time class="timeago" datetime="2019-03-03T12:56:28.000Z">about 6 hours ago</time>
  

Какая дата и время указаны правильно, 12: 56 утра по восточному времени (Америка / Chcago), но это было всего около 10 минут назад.

Итак, я в растерянности, я безуспешно пытался исправить проблемы с часовым поясом и не знаю, что еще можно сделать.

Как я могу заставить timeago считывать правильное количество времени?

Ответ №1:

Это datetime неверно. Это Z в конце обозначает его как часовой пояс UTC, а не ваш местный часовой пояс. Таким образом, timeago правильно дает вам разницу в несколько часов с этим временем в UTC.

Проверьте свои входные данные и эту логику преобразования в JS.

Комментарии:

1. Спасибо. В итоге я использовал PHP для преобразования времени в ISO 8601 вместо Javascript, и сейчас это работает.