2013-11-28 3 views
0

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

var dates = 

"[{\"Date\":\"1996-05-31T00:00:00\"},{"Date\":\"1996-06-30T00:00:00\"},{\"Date\":\"1996-07-31T00:00:00\"},{\"Date\":\"1996-08-31T00:00:00\"},{"Date\":\"1996-09-30T00:00:00\"},{\"Date\":\"1996-10-31T00:00:00\"} ... 
{\"Date\":\"2013-08-31T00:00:00\"},{"Date\":\"2013-09-30T00:00:00\"},{\"Date\":\"2013-10-31T00:00:00\"}]" 

примечание ... где я остановил все переменные между ними из-за пространства.

Это то, что я до сих пор:

var data = JSON.parse(dates); 

var d1 = [] d2 = [], d3 []; 

var today = new Date();today.setHours(0,0,0,0); 
var last5Years = new Date(today.setFullYear(today.getFullYear() -5)).getTime(); 
var last10Years = new Date(today.setFullYear(today.getFullYear() - 10)).getTime(); 

for (i = 0; i < data.length; i++) { 
    var s = data[i].Date.split('T')[0]; 
    var t = [new Date(s).getTime()]; 
    d1.push(t); // all dates 
    if (t[0] > last5Years) { 
    d2.push(t); //push last 5years dates to d2 
    } 
else if (t[0] > last10Years) { 
    d3.push(t); //push last 10 years dates to d3 
} 
} 

Д2, кажется, работает, но d3 по какой-то причине не является правильным.

Заранее спасибо

+0

Вы хотите, чтобы каждый день в году составлял 5 лет? Или вы хотите время? –

+0

'getTime()' 5 лет назад, и 10 лет назад и сравнить с вашими датами .... кажется довольно простым. – charlietfl

+0

Вы хотите выделить даты из массива данных в 2 категории> 5 и> 10 –

ответ

1

1) Получить today's date как ниже

var today = new Date(); //returns dateTime 
today.setHours(0,0,0,0); //reset time to zero to get only the date part 

2) Чтобы вернуться к 5 лет назад, получить и установить его.

var last5Years = new Date(today.setFullYear(today.getFullYear() + 5)).getTime(); 

3) Теперь, чтобы получить обратно до 10 лет, снова уменьшить сегодня год от 5 (не 10) и установите его.

var last10Years = new Date(today.setFullYear(today.getFullYear() + 5)).getTime(); 

4) Как вы уже разобрать дату в формате JSON, просто добавьте следующие условия

var s = data[i].Date.split('T')[0]; 
    var t = [new Date(s).getTime()]; 
    d1.push(t); //push all dates to d1 
    if (t < last5Years) { 
     d2.push(t); //push last 5years dates to d2 
    } 
    else if (t < last10Years) { 
     d3.push(t); //push last 10 years dates to d3 
    } 

Наконец вы код будет

var data = JSON.parse(dates); 
var d1 = [], d2 = [], d3 = []; 
for (var i = 0; i<data.length;i++) { 
    var today = new Date(); 
    today.setHours(0,0,0,0); 
    //Get time of last 5 years 
    var last5Years = new Date(today.setFullYear(today.getFullYear() + 5)).getTime(); 
    //Get time of last 10 years 
    var last10Years = new Date(today.setFullYear(today.getFullYear() + 5)).getTime(); 
    var s = data[i].Date.split('T')[0]; 
    var t = [new Date(s).getTime()]; 
    d1.push(t); //push all dates to d1 
    if (t < last5Years) { 
     d2.push(t); //push last 5years dates to d2 
    } 
    else if (t < last10Years) { 
     d3.push(t); //push last 10 years dates to d3 
    } 
} 

Надеюсь, вы понимаете.

+0

это похоже на то, что мне нужно, я получаю эту ошибку, хотя, TypeError: today.setFullYear (...). getTime не является функцией var last5Years = today.setFullYear (today.getFullYear + 5) .getTime(); – uknowit2

+0

@ uknowit2 Извините, это была ошибка типографии. измените его как 'var last5Years = new Date (today.setFullYear (today.getFullYear() + 5)). getTime();' – Praveen

+0

ok Я думаю, что мы очень близки. мои серии d1 и серии d2 имеют точно такие же данные. console.log (last5Years) = 1543389063839, а моя последняя серия дат - 1380499200000, сначала 833500800000, поэтому t uknowit2

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