Alguém pode sugerir uma maneira de comparar os valores de duas datas maiores que, menores que e não no passado usando JavaScript? Os valores serão provenientes de caixas de texto.
javascript
date
datetime
compare
Alex
fonte
fonte
Respostas:
O objeto Date vai fazer o que quiser - construção um para cada data, em seguida, compará-los usando o
>
,<
,<=
ou>=
.A
==
,!=
,===
, e!==
operadoras exigem que você usedate.getTime()
como empara ficar claro, basta verificar a igualdade diretamente com os objetos de data que não funcionam
Sugiro que você use listas suspensas ou alguma forma similar restrita de entrada de data em vez de caixas de texto, para que você não se encontre no inferno da validação de entrada.
fonte
setHours(0,0,0,0)
dessa maneira. Elimina a necessidade de chamadas,setMinutes()
etc. Além disso, executa mais rapidamente.toString()
método nas duas datas e depois comparar com o==
operador? Parece muito mais fácil do que redefinir o tempo e comparar depois, existem desvantagens para isso?A maneira mais fácil de comparar datas em javascript é primeiro convertê-las em um objeto Date e, em seguida, comparar esses objetos de data.
Abaixo, você encontra um objeto com três funções:
datas.compare (a, b)
Retorna um número:
datas.inRange (d, início, fim)
Retorna um booleano ou NaN:
datas.converter
Usado por outras funções para converter suas entradas em um objeto de data. A entrada pode ser
.
fonte
(a > b) - (a < b)
é útil para classificar datas variedadeArray.prototype.sort
desde que todos os valores sejam datas válidas. Se pudesse haver datas inválidos, eu recomendo usar algo comofunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
é mais simples e substitui toda a declaração de retorno.Compare
<
e,>
como sempre, mas qualquer coisa que envolva=
deve usar um+
prefixo. Igual a:Espero que isto ajude!
fonte
x.getTime() === y.getTime()
método, tanto legível e extremamente rápido ver JSPerf+
operador tenta converter a expressão em um número.Date.valueOf()
é usado para a conversão (que retorna a mesma coisa queDate.getTime()
.)<
,<=
,>
E>=
usar o mesmo algoritmo ( resumo algoritmo de comparação relacional ) nos bastidores.Os operadores relacionais
<
<=
>
>=
podem ser usados para comparar datas do JavaScript:No entanto, os operadores de igualdade
==
!=
===
!==
não podem ser usados para comparar (o valor de) datas porque :Você pode comparar o valor das datas para a igualdade usando qualquer um destes métodos:
Ambos
Date.getTime()
eDate.valueOf()
retornam o número de milissegundos desde 1 de janeiro de 1970, 00:00 UTC. Tanto aNumber
função quanto o+
operador unário chamam osvalueOf()
métodos nos bastidores.fonte
Thursday, 10 Aug 2017
é um formato não padrão e navegadores diferentes podem analisá-lo de maneira diferente ou não analisá-lo. Veja as notas emDate.parse
.De longe, o método mais fácil é subtrair uma data da outra e comparar o resultado.
fonte
Comparar datas em JavaScript é bastante fácil ... JavaScript possui um sistema de comparação interno para datas, o que facilita a comparação ...
Basta seguir estas etapas para comparar o valor de 2 datas, por exemplo, você tem 2 entradas nas quais cada um tem um valor de Data
String
e você pode compará-las ...1. você tem 2 valores de string obtidos de uma entrada e deseja compará-los, são os seguintes:
2. Eles precisam
Date Object
ser comparados como valores de data, portanto, simplesmente converta-os para data, usandonew Date()
, eu apenas os redesigno por simplicidade de explicação, mas você pode fazer o que quiser:3. Agora basta compará-los, usando o
>
<
>=
<=
fonte
<
,>
,<=
,>=
) a ser utilizado, os objetos Date são convertidos primeiro a unix época (segundos), e funciona bem. No entanto, isso pode levar ao erro comum de fazerdate1 == date2
onde, de fato, um erro é introduzido como não o valor, mas a igualdade da instância é verificada. Para evitar esta situação e verificar a igualdade do valor de data isso funcionaria:date1.valueOf() == date2.valueOf()
, ou mais curtadate1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
eNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Comparar apenas o dia (ignorando o componente de hora):
Uso:
fonte
que formato?
Se você construir um objeto Data Javascript , poderá subtraí-lo para obter uma diferença de milissegundos (editar: ou apenas compará-lo):
fonte
==
problema de comparação mencionado acima.você usa esse código,
E também verifique este link http://www.w3schools.com/js/js_obj_date.asp
fonte
RESPOSTA CURTA
Aqui está uma função que retorna {boolean} se a demonstração from dateTime> to dateTime em ação
Explicação
jsFiddle
Como agora você tem as duas horas no tipo de número, você pode compará-las com qualquer operação de comparação
(>, <, =,! =, ==,! ==,> = AND <=)
Então
se você estiver familiarizado com a sequência personalizada de
C#
formato de data e hora, esta biblioteca deve fazer exatamente a mesma coisa e ajudá-lo a formatar sua data e hora dtmFRM, independentemente de você estar passando na sequência de data e hora ou no formato unixUso
DEMO
tudo o que você precisa fazer é passar qualquer um desses formatos pacificados no
js
arquivo da bibliotecafonte
A maneira mais simples é,
fonte
Nota - Comparar apenas a parte da data:
Quando comparamos duas datas em javascript. Também leva horas, minutos e segundos. Então, se precisarmos comparar apenas a data, esta é a abordagem:
Agora:
if date1.valueOf()> date2.valueOf()
funcionará como um encanto.fonte
fonte
a
eb
sendoDate
objetos você também pode usarreturn a*1 == b*1;
+a == +b
fonte
Apenas para adicionar mais uma possibilidade às muitas opções existentes, você pode tentar:
... o que parece funcionar para mim. Claro que você precisa garantir que as duas datas não sejam indefinidas ...
Dessa forma, podemos garantir uma comparação positiva se ambos forem indefinidos também, ou ...
... se você preferir que eles não sejam iguais.
fonte
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
O método retorna 1 se
dateTimeA
for maior quedateTimeB
O método retorna 0 se for
dateTimeA
igualdateTimeB
O método retorna -1 se
dateTimeA
for menor quedateTimeB
fonte
Date
objetos.<
ou>
operadores quando o momento já vem com métodos úteis de comparação como.isBefore
e.isAfter
, está tudo na documentaçãoCuidado com o fuso horário
Uma data javascript não tem noção de fuso horário . É um momento no tempo (ticks desde a época) com funções úteis para traduzir de e para strings no fuso horário "local". Se você deseja trabalhar com datas usando objetos de data, como todo mundo aqui está fazendo, você deseja que suas datas representem a meia-noite do UTC no início da data em questão. Essa é uma convenção comum e necessária que permite trabalhar com datas, independentemente da estação ou do fuso horário de sua criação. Portanto, você precisa estar muito vigilante para gerenciar a noção de fuso horário, principalmente quando criar seu objeto UTC Date da meia-noite.
Na maioria das vezes, você deseja que sua data reflita o fuso horário do usuário. Clique se hoje é seu aniversário . Os usuários da Nova Zelândia e EUA clicam ao mesmo tempo e obtêm datas diferentes. Nesse caso, faça isso ...
Às vezes, a comparabilidade internacional supera a precisão local. Nesse caso, faça isso ...
Agora você pode comparar diretamente seus objetos de data, conforme as outras respostas sugerem.
Tendo tomado o cuidado de gerenciar o fuso horário ao criar, também é necessário manter o fuso horário ao converter novamente em uma representação de sequência. Então você pode usar com segurança ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
E evite totalmente tudo o mais, especialmente ...
getYear()
,getMonth()
,getDate()
fonte
Digamos que você tenha os objetos de data A e B, obtenha o valor de tempo do EPOC e subtraia para obter a diferença em milissegundos.
Isso é tudo.
fonte
Para comparar duas datas, podemos usar a biblioteca JavaScript date.js. que pode ser encontrada em: https://code.google.com/archive/p/datejs/downloads
e use o
Date.compare( Date date1, Date date2 )
método e ele retornará um número que significa o seguinte resultado:-1 = data1 é menor que data2.
0 = valores são iguais.
1 = data1 é maior que data2.
fonte
Subtrair duas datas, obter a diferença em milissegundos, se você obtiver
0
a mesma datafonte
Para criar datas a partir de texto livre em Javascript, você precisa analisá-lo no objeto Date ().
Você pode usar Date.parse (), que usa texto livre para convertê-lo em uma nova data, mas se você tiver controle sobre a página, recomendo usar caixas de seleção HTML ou um seletor de datas como o controle de calendário YUI ou a interface do usuário do jQuery Datepicker .
Depois de ter uma data como as outras pessoas apontaram, você pode usar a aritmética simples para subtrair as datas e convertê-la novamente em vários dias, dividindo o número (em segundos) pelo número de segundos em um dia (60 * 60 * 24 = 86400).
fonte
fonte
Uma versão aprimorada do código postada por "some"
uso:
fonte
Se a seguir for o seu formato de data, você poderá usar este código:
Ele verificará se o
20121121
número é maior20121103
ou não.fonte
first == second
oufirst < second
oufirst > second
. Essa é uma das muitas belezas da ISO8601 em comparação com MM / DD / AA, DD / MM / AA, AA / DD / MM, DD / AA / MM ou MM / AA / DD.Eu costumo armazenar
Dates
comotimestamps(Number)
em bancos de dados.Quando preciso comparar, simplesmente comparo entre os carimbos de data e hora ou
converta-o em objeto de data e compare com
> <
se necessário.Observe que == ou === não funciona corretamente, a menos que suas variáveis sejam referências do mesmo objeto Data.
Converta esses objetos Date em timestamp (number) primeiro e depois compare a igualdade deles.
Data até a data e hora
Data e hora até a data
fonte
Antes de comparar o
Dates
objeto, tente definir os dois milissegundos para zero comoDate.setMilliseconds(0);
.Em alguns casos em que o
Date
objeto é criado dinamicamente em javascript, se você continuar imprimindoDate.getTime()
, verá os milissegundos mudando, o que impedirá a igualdade das duas datas.fonte
atuação
Hoje 2020.02.27 Realizo testes de soluções escolhidas no Chrome v80.0, Safari v13.0.5 e Firefox 73.0.1 no MacOs High Sierra v10.13.6
Conclusões
d1==d2
(D) ed1===d2
(E) são mais rápidas para todos os navegadoresgetTime
(A) é mais rápida quevalueOf
(B) (ambas são de velocidade média)Detalhes
Abaixo, são apresentadas as soluções usadas nos testes de desempenho. Você pode executar o teste em sua máquina AQUI
Mostrar snippet de código
Resultados para chrome
fonte
d1==d2
oud1===d2
é inútil no contexto da questão.Use este código para comparar a data usando javascript.
Obrigado D.Jeeva
fonte
fonte
Aqui está o que eu fiz em um dos meus projetos,
chamando isso no formulário ao enviar. espero que isto ajude.
fonte