2013-10-07 5 views
2

Мой скрипт в порядке, но в FireFox и IE результат: NaN: NaN. Это мой сценарий: кто-нибудь знает, что случилось?NaN: NaN в firefox и IE, CHROME отлично работает

Выход $ дб [время] является: 2013-10-07 14:28:35 (Отметка база)

<script> 
var end = new Date('<?=$db[time]?>'); 

    var _second = 1000; 
    var _minute = _second * 60; 
    var _hour = _minute * 60; 
    var _day = _hour * 24; 
    var timer; 

    function showRemaining() { 
     var now = new Date(); 
     var distance = end - now; 
     if (distance < 0) { 

      clearInterval(timer); 
      document.getElementById('countdown').innerHTML = 'ITS NOW TIME!</font><BR><BR>';     
      return; 
     } 
     var days = Math.floor(distance/_day); 
     var hours = Math.floor((distance % _day)/_hour); 
     var minutes = Math.floor((distance % _hour)/_minute); 
     var seconds = Math.floor((distance % _minute)/_second); 


     document.getElementById('countdown').innerHTML = '<font color="orange">' + minutes + ':'; 
     document.getElementById('countdown').innerHTML += '<font color="orange">' + seconds + ' minutes</font>'; 
    } 

    timer = setInterval(showRemaining, 1000); 
</script> 
+3

Можете ли вы предоставить значение $ дб [время]? – opalenzuela

+0

и выход '' Будет? –

+0

2013-10-07 OUTPUT of $ db [время] = 2013-10-07 14:28:35 – user2519424

ответ

2

Это из-за стоимости $db[time].

Вы сказали в комментарии, что формат даты/времени - это 2013-10-07 14:28:35, который является выходным файлом DATETIME по умолчанию для MySQL, когда он должен быть 2013-10-07T14:28:35.

Хром поддерживает формат 2013-10-07 14:28:35 как удобство, однако это не в спецификации Javascript, поэтому не все другие браузеры.

Попробуйте это:

<? echo str_replace(' ', 'T', $db['time']); ?> 
+0

Это не работает: в chrome вывод также: NaN: NaN прямо сейчас – user2519424

+0

Что такое вывод 'str_replace ('', 'T', $ db ['time']); '? –

+0

ничего не получается. Blanc – user2519424

0

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

HTML

<div id="countdown"></div> 

Javascript

function isGregorianLeapYear(year) { 
    return year % 400 === 0 || year % 100 !== 0 && year % 4 === 0; 
} 

function daysInGregorianMonth(year, month) { 
    var days; 

    if (month == 2) { 
     days = 28; 
     if (isGregorianLeapYear(year)) { 
      days += 1; 
     } 
    } else { 
     days = 31 - ((month - 1) % 7 % 2); 
    } 

    return days; 
} 

function timeStampToDate(timeStamp) { 
    var dateObject, 
     dateTime, 
     date, 
     time, 
     value; 

    if (typeof timeStamp === "string") { 
     dateTime = timeStamp.split(" "); 
     if (dateTime.length === 2) { 
      date = dateTime[0].split("-"); 
      if (date.length === 3) { 
       value = +date[0]; 
       if (date[0].length === 4 && value >= -9999 && value <= 9999) { 
        value = +date[1]; 
        if (date[1].length === 2 && value >= 1 && value <= 12) { 
         date[1] = value - 1; 
         value = +date[2]; 
         if (date[2].length === 2 && value >= 1 && value <= daysInGregorianMonth(+date[0], date[1])) { 
          time = dateTime[1].split(":"); 
          if (time.length === 3) { 
           value = +time[0]; 
           if (time[0].length === 2 && value >= 0 && value <= 23) { 
            value = +time[1]; 
            if (time[1].length === 2 && value >= 0 && value <= 59) { 
             value = +time[2]; 
             if (time[2].length === 2 && value >= 0 && value <= 59) { 
              dateObject = new Date(Date.UTC.apply(Date, date.concat(time))); 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

    if (typeof dateObject === "undefined") { 
     dateObject = new Date(NaN); 
    } 

    return dateObject; 
} 

function emptyNode(node) { 
    while (node.firstChild) { 
     node.removeChild(node.firstChild); 
    } 
} 

var countdown = document.getElementById("countdown"), 
    end = timeStampToDate("2013-10-07 16:57:00"), 
    intervalId; 

end = end.getTime() + end.getTimezoneOffset() * 60000; 

function showRemaining() { 
    var now = new Date().getTime(); 

    if (isNaN(end) || isNaN(now)) { 
     clearInterval(intervalId); 
     emptyNode(countdown); 
     countdown.appendChild(document.createTextNode("Error")); 
    } else if (now < end) { 
     emptyNode(countdown); 
     countdown.appendChild(document.createTextNode(end - now)); 
    } else { 
     clearInterval(intervalId); 
     emptyNode(countdown); 
     countdown.appendChild(document.createTextNode("ITS NOW TIME!")); 
    } 
} 

intervalId = setInterval(showRemaining, 1000); 

jsFiddle

1

Javascript формат времени отличается от PHP так светлячок будет отображаться NaN: NaN: NaN. Вы должны тайное время, как показано ниже:

формат дата PHP

времени
$yourDate = date("M d, Y H:i:s", strtotime($db['time']))); 

прибудет как этого

date = new date("<?=$yourDate?>").getTime(); 
Смежные вопросы