Javascript метод getDate () для таймера обратного отсчета - PullRequest
0 голосов
/ 20 сентября 2011

В Javascript всякий раз, когда мы вызываем метод getDate (), для определенного дня месяца возвращается значение 1-31.Это создает проблему в моем таймере обратного отсчета, когда я задаю будущую дату в var goal, которая больше 31, что заставляет таймер обратного отсчета вывести «12» вместо количества дней, которые фактически остаются до будущей даты.

  function twoDigits(number) {return (number < 10 ? '0' : '') + number};

        var goal = "Sun January 01 2012 00:00:01";
        goal = new Date(goal);
        var now = new Date();
        var count = new Date(goal.getTime() - now.getTime());
        var day = count.getDate() -1;
        var hour = count.getHours()-1; 
        var format = twoDigits(day) + ":" + twoDigits(hour) + ":" + twoDigits(count.getMinutes()) + ":" + twoDigits(count.getSeconds());
      $(function () {
        $('#counter').countdown({
          image: 'digits.png',
          startTime: format
        });
      });

Есть идеи, как мне это исправить?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011
function padLeft(str,len,char) {
    len=Number(len)||1;
    char=String(char)||" ";
    for(var i=0;i<len;i++)str=char+str;
    return str.substr(str.length-len);
}

//$(document).ready(function() {
    var goal = "Sun January 01 2011 00:00:01";
    goal = new Date(goal);
    var now = new Date();
    var count = goal.getTime() - now.getTime();
    var sign = count/Math.abs(count);
    count = Math.abs(count);
    var days = Math.floor(count/(24*60*60*1000));
    count -= days*24*60*60*1000;
    var hours = Math.floor(count/(60*60*1000));
    count -= hours*60*60*1000;
    var minutes = Math.floor(count/(60*1000));
    count -= minutes*60*1000;
    var secs = Math.floor(count/1000);

    var startTime = days +":"+ padLeft(hours,2,"0") +":"+ padLeft(minutes,2,"0") +":"+ padLeft(secs,2,"0");
    alert(startTime);
    /*
    $("#counter").countdown({
        image: 'digits.png',
        startTime: startTime,
        format: "dd:hh:mm:ss"
    });
    */ 
//}
0 голосов
/ 20 сентября 2011

Это не точное решение проблемы вашего кода но если вам нужны вспомогательные методы для дат, взгляните на sugar.js , у него есть множество вспомогательных методов, таких как простой расчет разницы в днях между текущей и заданной датами. посмотрите на страницу функций для всех методов дат

Вы можете использовать эту функцию, например:

var goal = "Sun January 01 2011 00:00:01";
goal = new Date(goal);
var difference = goal.daysFromNow();

daysFromNow() уже является псевдонимом для daysUntil() & daysSince(), которые предназначены для расчета различий в прошлом или будущем, daysFromNow () заботится о прошлом и будущем одновременно:)

и эта переменная даст вам общее количество дней, даже если оно превышает 31 день.

...