2013-02-23 7 views
0

Я написал код для расчета возраста контента на веб-сайте. Это неэффективно, и расчеты уходят. Я написал этот скрипт раньше, и в последний раз он работал отлично, но я не могу найти этот проклятый файл.Есть ли лучший способ рассчитать возраст контента

Я думаю, что проблема вычисления вызвана годом. Может ли кто-нибудь предложить исправить для меня? Созданный формат даты - YYYYMMDD, а вывод - целые недели (это важно), то есть пример ниже должен выводить недели «52».

var created='20120223'; 
var year=Number(created.substr(0,4)); 
var month=Number(created.substr(4,2))-1; 
var day=Number(created.substr(6,2)); 
var d = new Date(); 
var curr_date = d.getDate(); 
var curr_month = d.getMonth() + 1; 
var curr_year = d.getFullYear(); 
var input_age = ((((curr_year - year)*31536000) + ((curr_month - month)*2678400) + ((curr_date - day)*86400))/604800).toFixed(0); 
document.getElementById('item12345_input').value = input_age + ' weeks'; 

ответ

2

Вы сначала вычитаете месяц. то вы снова добавляете месяц. попробуйте это

var created='20120223'; 
var year=Number(created.substr(0,4)); 
var month=Number(created.substr(4,2))-1; 
var day=Number(created.substr(6,2)); 
var d = new Date(); 
var curr_date = d.getDate(); 
var curr_month = d.getMonth(); 
var curr_year = d.getFullYear(); 
var input_age = ((((curr_year - year)*31536000) + ((curr_month - month)*2678400) + ((curr_date - day)*86400))/604800).toFixed(0); 
alert(input_age + ' weeks'); 
+0

Это прекрасно работает, спасибо, полин, я чрезвычайно благодарен. –

+0

спасибо. рад помочь – polin

0

Просто вычтите 2 даты.

var createdDate = new Date(
    +created.substring(0, 4), // Four digit year 
    created.substring(4, 6)-1, // Base-zero month 
    +created.substring(6, 8)); // Day of month 
var ageMillis = (new Date) - createdDate; 
var MS_PER_WEEK = 1000/* ms /sec */ 
       * 60 /* sec/min */ 
       * 60 /* min/hr */ 
       * 24 /* hr /day */ 
       * 7 /* day/wk */; 
var ageWeeks = ageMillis/MS_PER_WEEK; 
+1

гм - месяцы 0 основе. – mplungjan

+0

Спасибо, Майк, это выглядит эффективно и точно. Один вопрос: можете ли вы немного изменить, чтобы включить значение для созданной даты (то есть 20120130)? –

+0

@mplungjan, хороший пункт. Исправлена. –

0

Примечание Месяцы 0 на основе

<script> 
var created ="20120223"; 
var yyyy = +created.substring(0, 4); 
var mm = created.substring(4, 6)-1; 
var dd = +created.substring(6, 8); 
var createdDate = new Date(yyyy,mm,dd); 
var ageMillis = new Date().getTime() - createdDate.getTime(); 
var MS_PER_WEEK = 1000/* ms /sec */ 
       * 60 /* sec/min */ 
       * 60 /* min/hr */ 
       * 24 /* hr /day */ 
       * 7 /* day/wk */; 
var ageWeeks = parseInt(ageMillis/MS_PER_WEEK); 

alert("Created on " +mm+"/"+dd+"/"+yyyy+" which is "+ageWeeks+ " week"+(ageWeeks==1?"":"s")+" ago"); 

</script> 
0

вы могли бы попробовать это:

var created='20120223'; 
    var year=Number(created.substr(0,4)); 
    var month = Number(created.substr(4,2)); 
    if (Number(created.substr(4,2)) < 10){ 
     month = '0'+ Number(created.substr(4,2)); 
    } 
    var day=Number(created.substr(6,2)); 
    var dt = year+'-'+month+'-'+day; 
    var dif = new Date().getTime() - Date.parse(dt); 
    var divWeek = 7 * 24 * 60 * 60 * 1000; 
    alert(Math.round(dif/divWeek)); 
Смежные вопросы