Доброго дня! Такой код почему-то дает NaN в Safari. Как исправить?
function returnRoubles(roubles)
{
if(roubles % 10 == 1 && (roubles == 1 || roubles > 20)) return "рубль";
else if((roubles % 10 == 2 || roubles % 10 == 3 || roubles % 10 == 4) && (roubles < 10 || roubles > 20)) return "рубля";
else return "рублей";
}
function returnCop(roubles)
{
if((roubles % 10 == 1) && (roubles == 1 || roubles > 20)) return "копейку";
else if((roubles % 10 == 2 || roubles % 10 == 3 || roubles % 10 == 4) && (roubles < 10 || roubles > 20)) return "копейки";
else return "копеек";
}
function setText() {
if(document.getElementById("cnt").innerHTML == "Ты накопил уже 0 рублей 0 копеек")
{
var curDate = new Date('<?php echo date("Y-m-d H:i:s"); ?>');
var startDate = new Date('<?php echo $main['startDate']; ?>');
money = Math.floor(((curDate-startDate)*<?php echo $main['money']; ?>)/(864000));
}
else money = money + 1;
console.log("money: "+money);
document.getElementById("cnt").innerHTML = "Ты накопил уже <br>"+Math.floor(money/100)+" "+returnRoubles(Math.floor(money/100))+" "+money%100+" "+returnCop(money%100);
showMoney(money);
}
setText();
console.log("interval: "+<?php echo round(864000/$main['money']); ?>);
setInterval(setText,<?php echo round(864000/$main['money']); ?>);
На экран: Ты накопил уже NaN рублей NaN копеек
function setText() {
if(document.getElementById("cnt").innerHTML == "Ты накопил уже 0 рублей 0 копеек")
{
var curDate = new Date('2017-08-01 16:30:51');
var startDate = new Date('2017-08-01 16:24:40');
money = Math.floor(((curDate-startDate)*50)/(864000));
}
else money = money + 1;
console.log("money: "+money);
document.getElementById("cnt").innerHTML = "Ты накопил уже <br>"+Math.floor(money/100)+" "+returnRoubles(Math.floor(money/100))+" "+money%100+" "+returnCop(money%100);
showMoney(money);
}
setText();
console.log("interval: "+17280);
setInterval(setText,17280);
html:
<h1 class='ontimer' id='cnt'>Ты накопил уже 0 рублей 0 копеек</h1>
Проблема
Проблема специфична для Internet Explorer и Safari.
var date = new Date("2011-02-07");
console.log(date);
или
var date = new Date("2011-02-07T11:05:00");
console.log(date);
Если вы выполнили приведенные выше фрагменты кода в разных браузерах, вы увидите, что в IE вы получите «NaN», а в Safari вы получите «Invalid Date». Однако Firefox, Chrome и Opera выводят правильную дату.
Решение
Проблема заключается в том, что вы передаете требуемую дату объекту Date (). По какой-то причине и не спрашивайте меня, почему два вышеупомянутых браузера на удивление не поддерживают формат даты «yyyy-mm-dd» и поэтому терпят неудачу. Мне не удалось составить окончательный список поддерживаемых форматов дат, однако я могу сказать, что следующие форматы определенно поддерживаются во всех браузерах и будут советовать придерживаться одного из них, чтобы избежать ошибок:
Нужно заменить формат дат на следующий.
var d = new Date(2011, 01, 07); // yyyy, mm-1, dd
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss
var d = new Date("02/07/2011"); // "mm/dd/yyyy"
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"
var d = new Date(1297076700000); // milliseconds
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC
Полностью текст в оригинале: JavaScript new Date() Returning NaN in IE or Invalid Date in Safari
NaN - Not a Number
Вы пытаетесь / получаете не число и пытаетесь использовать его как число.
Попробуйте типизировать получаемые значения функцией parseInt.
Больше всего вызывает подозрение $main['money'] возможно вы строковое значение используете в математических функциях.
Продвижение своими сайтами как стратегия роста и независимости