Как получить разницу во времени между двумя временными метками в секундах с помощью jQuery?

Я хочу отобразить x seconds ago на основе временной метки MySQL.

Я нашел плагин под названием timeago.

Но я не могу найти способ заставить его отображать только секунды.

Я согласен с 61 секундой или 300 секундами. Любой способ преобразовать вывод в секунды с помощью timeago или с помощью чистого jQuery/JavaScript?

Спасибо за любую помощь!

Редактировать:

Пример случая:

$time1 = "2014-02-02 23:54:04"; // plus PHP ways to format it.
//$time2 = NOW() , or date(); whatever. 

Я просто хочу узнать, сколько секунд прошло с $time1.

Редактировать 2:

Рабочий код:

<script type="text/javascript">
$(function(){
    var d2 = new Date();
    var d1 = new Date("2014-02-02 23:54:04");
    $("a#timedif").html("Diff. Seconds : "+((d2-d1)/100).toString());
    // note that you may want to round the value
});
</script>

Выводит Diff. Seconds : NaN


person jeff    schedule 02.02.2014    source источник
comment
см.: stackoverflow.com/questions /14297625/ и stackoverflow.com/questions/41948/   -  person CodeToad    schedule 03.02.2014
comment
Удалось ли вам получить метку времени в виде объекта JS? Если да, то что это за объект?   -  person Isiah Meadows    schedule 03.02.2014
comment
@impinball Нет, но это не проблема. Я могу просто echo с помощью PHP добавить тег <script›. Редактировать: я не знаю. Я буду форматировать с помощью PHP в соответствии с потребностями функции JS. CodeToad Спасибо. Пример был бы отличным ответом!   -  person jeff    schedule 03.02.2014
comment
предоставьте два примера строк даты. см. ответ ниже, что делать после синтаксического анализа.   -  person CodeToad    schedule 03.02.2014
comment
Я добавил образец дела. Не знаю, как парсить в JS. Дайте мне гуглить :)   -  person jeff    schedule 03.02.2014
comment
зачем делить на 100? чтобы получить секунды из миллисекунд, вам нужен еще один ноль. вы получаете Nan из-за строковых значений, пожалуйста, используйте новую дату ()   -  person CodeToad    schedule 03.02.2014


Ответы (5)


предполагая, что вы анализируете строку в объект даты JavaScript, вы можете сделать (date2 - date1)/1000

чтобы проанализировать временную метку формата mysql, просто введите строку в новую дату():

 var d2 = new Date('2038-01-19 03:14:07');
 var d1 = new Date('2038-01-19 03:10:07');

 var seconds =  (d2- d1)/1000;

исправление редактирования 2 в вопросе:

<script type="text/javascript">
$(function(){
var d2 = new Date();
var d1 = new Date("2014-02-02 23:54:04");
$("a#timedif").html("Diff. Seconds : "+((d2-d1)/1000).toString());
 });

person CodeToad    schedule 02.02.2014
comment
Практически идеально. Любой способ построить d2 с текущей датой-временем? - person jeff; 03.02.2014
comment
текущее время - это просто новая дата () без параметра - person CodeToad; 03.02.2014
comment
OMG Это просто :) Позвольте мне попробовать и принять ваш ответ. - person jeff; 03.02.2014
comment
если вы получаете одну дату с сервера, а другую с клиента, вам необходимо убедиться, что обе они находятся в одном часовом поясе, например UTC - person CodeToad; 03.02.2014
comment
да. Возможно, я получу дату из MySQL с помощью SELECT NOW(): Но я получаю NaN. см. Редактировать 2 в вопросе. - person jeff; 03.02.2014
comment
это потому, что вы используете Date() вместо new Date(). попробуйте оба в консоли, чтобы увидеть разницу. без «нового» вы получаете строковое значение. - person CodeToad; 03.02.2014

Если у вас все в порядке с этим плагином, вы можете немного изменить его, чтобы он работал только с секундами.

  var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
    seconds < 90 && substitute($l.minute, 1) ||
    minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
    minutes < 90 && substitute($l.hour, 1) ||
    hours < 24 && substitute($l.hours, Math.round(hours)) ||
    hours < 42 && substitute($l.day, 1) ||
    days < 30 && substitute($l.days, Math.round(days)) ||
    days < 45 && substitute($l.month, 1) ||
    days < 365 && substitute($l.months, Math.round(days / 30)) ||
    years < 1.5 && substitute($l.year, 1) ||
    substitute($l.years, Math.round(years));

с этой частью идти только с конвертацией в секунды

см. скрипку: http://jsfiddle.net/zGXLU/1/

person CBeTJlu4ok    schedule 02.02.2014
comment
Какой это плагин? Вы уверены, что ничего не забыли (например, $l или substitute)? Как его модифицировать? - person Bergi; 03.02.2014
comment
это из плагина timeago, это просто копия, в которую нужно внести изменения - person CBeTJlu4ok; 03.02.2014

jQuery — это просто библиотека JavaScript, поэтому JavaScript будет работать только в вашем скрипте jQuery:

// specified date:
var oneDate = new Date("November 02, 2017 06:00:00");

// number of milliseconds since midnight Jan 1 1970 till specified date
var oneDateMiliseconds = oneDate.getTime();

// number of milliseconds since midnight Jan 1 1970 till now
var currentMiliseconds = Date.now(); 

// return time difference in milliseconds
var timePassedInMilliseconds = (currentMiliseconds-oneDateMiliseconds)/1000;
alert(timePassedInMilliseconds);
person Gilbert Cut    schedule 02.11.2017

Моя работа с разницей во времени для расчета каждого значения отдельно

var start = new Date('Mon Jul 30 2018 19:35:35 GMT+0500');
var end = new Date('Mon Jul 30 2018 21:15:00 GMT+0500');

var hrs = end.getHours() - start.getHours();
var min = end.getMinutes() - start.getMinutes(); 
var sec = end.getSeconds() - start.getSeconds();  

var hour_carry = 0;
var minutes_carry = 0;
if(min < 0){
       min += 60;
       hour_carry += 1;
   }
hrs = hrs - hour_carry;
if(sec < 0){
       sec += 60;
       minutes_carry += 1;
   }

min = min - minutes_carry;

console.log("hrs",hrs);
console.log("min",min);
console.log("sec",sec);
console.log(hrs + "hrs " + min +"min " + sec + "sec");
person Mubashar Shahzad    schedule 30.07.2018

Получить разницу между двумя временными метками в

Секунды: (получить метку времени с помощью new Date().getTime())

diff_in_time = (timestamp_1 - timestamp2);

Через дни:

diff_in_days = parseInt((timestamp_1 - timestamp2) / (1000 * 3600 * 24));
person Rishabh Jhalani    schedule 22.11.2019