2013-09-26 2 views
0

У меня есть диаграмма Kendo ui, как this, и нужно показать последние 12 месяцев сегодняшней даты на оси.
Я нашел this, чтобы продлить объект даты, чтобы получить предыдущий месяц. Проблема, похоже, в том, что я получил дату типа «2013/05/31», а в предыдущие месяцы не было 31-го дня.Последние 12 месяцев в Javascript

Date.prototype.toPrevMonth = function (num) { 
    var thisMonth = this.getMonth(); 
    this.setMonth(thisMonth-1); 
    if(this.getMonth() != thisMonth-1 && (this.getMonth() != 11 || (thisMonth == 11 &&  this.getDate() == 1))) 
    this.setDate(0); 
} 


new Date().toPrevMonth(11), 
new Date().toPrevMonth(10), 
new Date().toPrevMonth(9), 
new Date().toPrevMonth(8), 
new Date().toPrevMonth(7), 
new Date().toPrevMonth(6), 
new Date().toPrevMonth(5), 
new Date().toPrevMonth(4), 
new Date().toPrevMonth(3), 
new Date().toPrevMonth(2), 
new Date().toPrevMonth(1), 
new Date().toPrevMonth(0) 

Может ли кто-нибудь помочь мне в случае, если состояние?
Функция построена, чтобы показывать только предыдущий месяц, но мне нужны последние 12 предыдущих месяцев.

Или есть гораздо более легкое решение? :-)

Спасибо за все!

ответ

1

Использование Datejs (http://www.datejs.com/)

Он имеет встроенную функцию, чтобы добавить месяцев:

Date.today().addMonths(-6); 

UPDATE: Поскольку вы не можете включить внешние файлы, вот соответствующая методы из Datejs.

/* 
* Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved. 
* License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
* Website: http://www.datejs.com/ or http://www.coolite.com/datejs/ 
*/ 

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

Date.prototype.isLeapYear = function() { 
    var y = this.getFullYear(); 
    return (((y % 4 === 0) && (y % 100 !== 0)) || (y % 400 === 0)); 
}; 

Date.getDaysInMonth = function (year, month) { 
    return [31, (Date.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; 
}; 

Date.prototype.getDaysInMonth = function() { 
    return Date.getDaysInMonth(this.getFullYear(), this.getMonth()); 
}; 

Date.prototype.addMonths = function (value) { 
    var n = this.getDate(); 
    this.setDate(1); 
    this.setMonth(this.getMonth() + value); 
    this.setDate(Math.min(n, this.getDaysInMonth())); 
    return this; 
}; 
+0

спасибо за ответ, но я не могу добавить файлы к приложению :-( – chris

+1

@ Крис ツ как о копировании и вставке исходного кода Datejs в ваш код. Не забудьте указать авторские права на код. – OnesimusUnbound

+0

LOL Я просто работал над тем, чтобы сделать точный вывод, чтобы исправить свой ответ. – cbeckner

3

Я также нужен список последних 12 месяцев это то, что я сделал:

var theMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 
var today = new Date(); 
var aMonth = today.getMonth(); 
var i; 
for (i=0; i<12; i++) { 
    document.writeln(theMonths[aMonth] + '<br>'); //here you can do whatever you want... 
    aMonth++; 
    if (aMonth > 11) { 
     aMonth = 0; 
    } 
} 
+1

классный, спасибо за обмен! – chris

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