Como posso descobrir a data mínima e máxima em uma série de datas? Atualmente, estou criando uma matriz como esta:
var dates = [];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))
Existe uma função incorporada para fazer isso ou devo escrever a minha própria?
javascript
date
max
min
lenda
fonte
fonte
dates.push('2011/06/05')
. Usando strings, a matriz pode ser simplesmente classificada e os valores do primeiro e último membro retornados e convertidos em datas, se necessário.YYYY/MM/DD HH:MM:SS
e houver muitas strings envolvidas, você recomendaria a comparação ouNumber(new Date(dateString))
comparações de strings ?Algo como:
Testado no Chrome 15.0.854.0 dev
fonte
Array.reduce()
não disponível no IE antes do IE9. Idéia legal embora.function foreach(func, array) { for(var i = 0; i != array.length; ++i) { func(array[i]); } } function reduce(combine, base, array) { foreach(function(element) { base = combine(base, element); }, array); return base; }
_.min
e_.max
trabalhar em matrizes de datas; use-os se estiver usando Lodash ou Underscore, e considere usar Lodash (que fornece muitas funções de utilidade como essas) se ainda não estiver.Por exemplo,
retornará a segunda data na matriz (porque é a mais antiga).
fonte
O mesmo que se aplica, agora com spread :
(pode ser um comentário sobre a melhor resposta)
fonte
Como as datas são convertidas em épocas UNIX (números), você pode usar Math.max / min para encontrar:
(testado apenas no Chrome, mas deve funcionar na maioria dos navegadores)
fonte
** Use Operadores de Spread | ES6 **
Isso fornecerá a data mínima da matriz.
fonte
ONELINER :
resultar em variáveis
min
emax
, complexidade O (nlogn) , exemplo editável aqui . Se o seu array tem valores sem data (comonull
), primeiro limpe-o comdates=dates.filter(d=> d instanceof Date);
.Exibir trecho de código
fonte
fonte
As respostas acima não tratam de valores em branco / indefinidos para corrigir isso. Usei o código abaixo e substituí os espaços em branco por NA:
Eu adicionei uma demonstração simples de javascript aqui e usei-a como um filtro com AngularJS neste codepen
fonte
Esta é uma maneira particularmente excelente de fazer isso (você pode obter o máximo de uma matriz de objetos usando uma das propriedades do objeto):
Math.max.apply(Math,array.map(function(o){return o.y;}))
Esta é a resposta aceita para esta página: Encontrar o valor máximo de um atributo em uma matriz de objetos
fonte
Usando Moment , Underscore e jQuery , para iterar uma série de datas.
JSON de amostra:
Javascript:
Espero que ajude.
fonte