2015-07-29 2 views
0

У меня есть этот код JavaScript. Мой вопрос: как мне заставить его функционировать?Как разрешить эту функцию?

Я пробовал timeSince("2008");, но это ничего не показывает.

var timeSince = function(date) { 
    if (typeof date !== 'object') { 
     date = new Date(date); 
    } 

    var seconds = Math.floor((new Date() - date)/1000); 
    var intervalType; 

    var interval = Math.floor(seconds/31536000); 
    if (interval >= 1) { 
     intervalType = 'year'; 
    } else { 
     interval = Math.floor(seconds/2592000); 
     if (interval >= 1) { 
      intervalType = 'month'; 
     } else { 
      interval = Math.floor(seconds/86400); 
      if (interval >= 1) { 
       intervalType = 'day'; 
      } else { 
       interval = Math.floor(seconds/3600); 
       if (interval >= 1) { 
        intervalType = "hour"; 
       } else { 
        interval = Math.floor(seconds/60); 
        if (interval >= 1) { 
         intervalType = "minute"; 
        } else { 
         interval = seconds; 
         intervalType = "second"; 
        } 
       } 
      } 
     } 
    } 

    if (interval > 1 || interval === 0) { 
     intervalType += 's'; 
    } 

    return interval + ' ' + intervalType; 
}; 

код взят из How to format time since xxx e.g. “4 minutes ago” similar to Stack Exchange sites

+1

Функция возвращает - «7 лет» – bpavlov

+0

Это уже функция, и вы даже используете ее правильно. Возможно, вы просто ничего не делаете со значением? См. Это [скрипка] (http://jsfiddle.net/2jkff888/) – Mike

+1

Вы читали комментарии в вопросе, где вы нашли ответ/исходный код, или вы просто скопировали/вставляли и надеетесь, что это сработает, если вы не будете Делать что-нибудь? – NewToJS

ответ

0

вами код ссылки уже есть функция, но она не выводит ничего, он просто возвращает String, содержащий значение, которое вы ищете. Таким образом, вам нужно будет использовать javascript для вставки этого String в свой HTML или вы можете alert() его, если хотите просто посмотреть его значение. Причина, по которой вы получаете 45 лет назад, состоит в том, что вы передаете целое число в функцию.

Сама функция использует JavaScript, встроенный в объект Date(), для вычисления времени. Когда вы передаете целое число, вы фактически создаете экземпляр этого объекта с миллисекундным значением.

Это из W3 школы:

Использование new Date(number), создает новый объект даты, как нулевое время плюс число. Нулевое время 01 января 1970 00:00:00 UTC. Номер указан в миллисекундах:

Угадайте, сколько лет прошло с 1970 года (45 лет!). Итак, если вы хотите узнать, сколько лет прошло с 2000 года, не используйте timeSince(2000), обязательно используйте timeSince("2000") (цитаты имеют значение).

обновленный Fiddle

Отредактировано исправлена ​​опечатка в Fiddle

+0

В вашем примере вы также используете 'alert (timeSince (1999));' not 'alert (timeSince ('1999'));' Я думаю, что OP изменил дату без добавления одиночных/двойных кавычек, чтобы будет возвращать 45 лет независимо от того, какая дата дана. – NewToJS

+0

Я вижу, что я представил неверную версию Fiddle в своем первоначальном комментарии. Я соответствующим образом обновил свой ответ. Спасибо. – Mike

+0

Больше всего приветствую :) Я видел, как это может смутить ОП, но сделать очень легкую ошибку. – NewToJS

0

Вам необходимо пройти правильный формат даты в функции.

Ср 29 июля 2015 12:10:49 GMT + 0100 (GMT Summer Time)

оповещения (TimeSince ('Ср 29 июля 2015 12:10:49 GMT + 0100 (GMT Summer Время)'));

Вы можете получить это с помощью new Date()

Вам также нужно сделать что-то с вызовом функции, чтобы увидеть/использовать полученные данные, покажу несколько примеров ниже.Результаты

оповещения

window.onload=function(){ 
 
var a = new Date(); 
 
alert(timeSince(a.setTime(a.getTime() - 150000))); 
 
} 
 
// 
 
var timeSince = function(date) { 
 
if (typeof date !== 'object') {date = new Date(date);} 
 
var seconds = Math.floor((new Date() - date)/1000); 
 
var intervalType; 
 
var interval = Math.floor(seconds/31536000); 
 
if(interval >= 1){intervalType = 'year'; 
 
}else{interval = Math.floor(seconds/2592000); 
 
if (interval >= 1){intervalType = 'month'; 
 
}else{interval = Math.floor(seconds/86400); 
 
if(interval >= 1) {intervalType = 'day'; 
 
}else{interval = Math.floor(seconds/3600); 
 
if(interval >= 1) {intervalType = "hour"; 
 
}else{interval = Math.floor(seconds/60); 
 
if(interval >= 1) {intervalType = "minute"; 
 
}else{ 
 
interval = seconds;intervalType = "second"; 
 
}}}}} 
 
if (interval > 1 || interval === 0){intervalType += 's';} 
 
return interval + ' ' + intervalType; 
 
};

Применить результаты к существующему элементу

  • getElementById()
  • innerHTML

window.onload=function(){ 
 
document.getElementById('example').innerHTML=timeSince('Wed Jul 29 2015 12:10:49 GMT+0100 (GMT Summer Time)'); 
 
} 
 
// 
 
var timeSince = function(date) { 
 
if (typeof date !== 'object') {date = new Date(date);} 
 
var seconds = Math.floor((new Date() - date)/1000); 
 
var intervalType; 
 
var interval = Math.floor(seconds/31536000); 
 
if(interval >= 1){intervalType = 'year'; 
 
}else{interval = Math.floor(seconds/2592000); 
 
if (interval >= 1){intervalType = 'month'; 
 
}else{interval = Math.floor(seconds/86400); 
 
if(interval >= 1) {intervalType = 'day'; 
 
}else{interval = Math.floor(seconds/3600); 
 
if(interval >= 1) {intervalType = "hour"; 
 
}else{interval = Math.floor(seconds/60); 
 
if(interval >= 1) {intervalType = "minute"; 
 
}else{ 
 
interval = seconds;intervalType = "second"; 
 
}}}}} 
 
if (interval > 1 || interval === 0){intervalType += 's';} 
 
return interval + ' ' + intervalType; 
 
};
<div id="example"></div>

Я надеюсь, что это помогает. Счастливое кодирование!

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