2014-09-23 2 views
0

Я пытаюсь создать обратный отсчет. В основном у меня есть время, когда клиент разместил заказ (который находится в формате dateTime, хранящемся в db, например, «2014-08-14 12:52:09»), и у меня также есть время, необходимое для завершения заказа (который находится либо в часах и минутах «1» 45 », либо в минутах минут« 45 »).Обратный отсчет Javascript

У меня есть сценарий обратного отсчета из Интернета, и я плохо разбираюсь в том, как отформатировать оба раза, чтобы скрипт понимает

Я получил этот приход от дб времени заказа ----> 12:52:09 времени экспирации ---> 45minutes

времени истечения может иногда включая часы, а также:. например: время истечения ---> 1 час 45 минут.

сценарий я получил из Интернета я заключенной внутри функции в данный момент:

JS:

function clockTicking(){ 

// set the date we're counting down to 
    var target_date = new Date("Aug 15, 2019").getTime(); 

    // variables for time units 
    var days, hours, minutes, seconds; 

    // get tag element 


    // update the tag with id "countdown" every 1 second 
    setInterval(function() { 

    // find the amount of "seconds" between now and target 
    var current_date = new Date().getTime(); 
    var seconds_left = (target_date - current_date)/1000; 

    // do some time calculations 
    days = parseInt(seconds_left/86400); 
    seconds_left = seconds_left % 86400; 

    hours = parseInt(seconds_left/3600); 
    seconds_left = seconds_left % 3600; 

    minutes = parseInt(seconds_left/60); 
    seconds = parseInt(seconds_left % 60); 

    // format countdown string + set tag value 
    $('.countdown').html(days + "d, " + hours + "h, "+ minutes + "m, " + seconds + "s"); 

    }, 1000); 

} 

Любая помощь будет принята с благодарностью.

ответ

1

Вы можете изменить начало сценария к этому

function setTimer(hours, minutes, dateTime){ 

    var date = new Date(dateTime); 
    date.setHours(date.getHours() + hours); 
    date.setMinutes(date.getMinutes() + minutes); 

    var target_date = date.getTime(); 

    // rest of script 
    } 

, вызывайте его с setTimer(1,30, "2014 09 24 00:23") установить обратный отсчет относительно 2014-09-24 01:53

Проверьте это здесь : jsFiddle

+0

Я больше не использую формат Datetime из db. Когда заказ размещается, время доставки рассчитывается и вставляется в db в формате «часы, минуты». –

+0

Humm, я думаю, что у меня все запуталось, мне всегда нужно время, чтобы сравнить с исходной точкой, иначе он всегда будет считать время Now() как точку сравнения, когда я обновляю страницу, так это? –

+0

Нам необходимо знать дату и время, когда клиент разместил заказ + время доставки или время, когда оно истечет, чтобы выполнить то, что вы хотите. –

1

Я хотел бы рекомендовать Moment.js для этого (и практически любого вида разбора даты/времени). При написании вашей собственной функции может показаться соблазнительной, часто есть много вещей, которые нужно учитывать, и это просто не стоит.

Использование Moment.js, что вы пытаетесь достичь можно сделать так:

function clockTicking(){ 

    var target_date = moment('Aug 15, 2019', 'MMM DD, YYYY'); 
    // update the tag with id "countdown" every 1 second 
    setInterval(function() { 
     var moment_diff = moment.duration(target_date.diff(moment())); 
     // format countdown string + set tag value 
     $('.countdown').html(moment_diff.days() + "d, " + moment_diff.hours() + "h, "+ moment_diff.minutes() + "m, " + moment_diff.seconds() + "s"); 

    }, 1000); 

} 

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

+0

Я обязательно посмотрю на Moment.js, спасибо за подсказку. :) –

1

Я действительно считаю, используя:

http://momentjs.com/docs/

Если вы делаете изрядное количество времени, даты обращения.

Однако похоже, что у вас возникли проблемы с преобразованием ваших двух временных форматов в объект времени даты?

var stripNonNumberics = function(string) { 
    return Number(string.replace(/\D/g, '')); 
    } 

    var target_date = "1hour 45minutes"; // or var target_date = "45minutes"; 
    var split_date = target_date.split(' '); 
    var minutes; 

    // If it has hours 
    if (split_date[1]) { 
    minutes = stripNonNumberics(split_date[1]) + (stripNonNumberics(split_date[0]) * 60); 
    } else { 
    minutes = stripNonNumberics(split_date[0]); 
    } 

    console.log(new Date(new Date().getTime() + minutes*60000);); 
+0

Спасибо за это :) –

Смежные вопросы