Я знаю, что было много подобных тем, но у меня просто есть проблема, на которую я не смог найти ответ. Мой сценарий:

window.onload = function(){
    // 200 seconds countdown
    var countdown = 14400; 
    //current timestamp
    var now   = Date.parse(new Date());

    //ready should be stored in your cookie
    if ( !document.cookie )
    {
        document.cookie = Date.parse(new Date (now + countdown  * 1000)); // * 1000 to get ms
    }

    //every 1000 ms
    setInterval(function()
    {
        var diff = ( document.cookie - Date.parse(new Date()) );

        if ( diff > 0 )
        {
            var message = diff/1000 + " seconds left";
        }
        else
        {
            var message = "finished";
        }

        document.body.innerHTML = message;

    },1000);
}

Я хочу сделать таймер обратного отсчета, который сообщает пользователю, сколько времени осталось в зависимости от его значения cookie. До сих пор мне удалось вычислить разницу между двумя значениями, но я не знаю, как сделать формат, скажем, «дд / мм / гг чч: мм: сс» из разницы времени (разность). Это вообще возможно?

1
user360330 26 Июн 2010 в 02:51

2 ответа

Лучший ответ

То, что вы хотите, это функция, которая преобразует разницу в (миллисекунды в нечто вроде

5д 4ч 3м 2с

Если вы не против иметь большое количество дней для периодов времени> нескольких месяцев, то вы можете использовать что-то вроде этого:

function human_time_difference(diff) {
    var s = diff % 60; diff = Math.floor(diff / 60);
    var min = diff % 60; diff = Math.floor(diff / 60);
    var hr = diff % 24; diff = Math.floor(diff / 24);
    var days = diff;

    return days + 'd ' + hr + 'h ' + min + 'm ' + s + 's';
}

Если у вас есть разница в миллисекундах, вам нужно будет передать это число, деленное на 1000. Вы также можете использовать Math.round, чтобы избавиться от дробей, но вы также можете оставить их включенными, если хотите, чтобы эта информация отображалась.

Получение месяцев и лет немного сложнее по нескольким причинам:

  1. Количество дней в месяце меняется.
  2. Когда вы переходите с середины одного месяца на середину следующего, промежуток времени не охватывает полные месяцы, даже если количество дней> 31 (например, сколько месяцев осталось между 2 июня и 30 июля ??).

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

PS: Когда вы публикуете вопрос, избегайте ненужных деталей. Например, ваш вопрос не имеет ничего общего с файлами cookie, setInterval или обработчиками загрузки. Единственная часть, которую вы не знаете, это как преобразовать (мили) секунды в дни, часы и т. Д. Может быть полезно предоставить некоторую справку о том, почему вы пытаетесь что-то сделать, но если нет необходимости понимать основной вопрос, поставьте его в конце, чтобы людям не приходилось разбираться с ним, прежде чем перейти к основной части. Тот же совет относится к вашему названию; убедитесь, что это актуально, исключив ненужные детали (например, файлы cookie и обратный отсчет).

2
allyourcode 26 Июн 2010 в 00:09

JavaScript не имеет встроенных методов форматирования даты, как вы могли бы ожидать, если бы вы сделали какой-либо PHP. Вместо этого вы должны построить строку вручную. Однако есть ряд методов получения, которые будут полезны для этой цели. Смотрите 10 способов форматирования времени и даты с помощью JavaScript.

Кроме того, чтобы вы знали. Date.parse не возвращает миллисекундную часть метки времени (она округляется). Если вам нужны миллисекунды, вы можете сделать одно из следующих

var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();

Или просто

var timestamp_ms = +d;
0
Justin Johnson 25 Июн 2010 в 23:04