javascript - new - node js date format




Compare duas datas com JavaScript (20)

Alguém pode sugerir uma maneira de comparar os valores de duas datas maior que, menor que, e não no passado, usando JavaScript? Os valores serão provenientes de caixas de texto ...


A maneira mais fácil de comparar datas no javascript é primeiro convertê-lo em um objeto Date e comparar esses objetos de data.

Abaixo você encontra um objeto com três funções:

  • dates.compare (a, b)

    Retorna um número:

    • -1 se a <b
    • 0 se a = b
    • 1 se a> b
    • NaN se a ou b é uma data ilegal
  • dates.inRange (d, start, end)

    Retorna um booleano ou NaN:

    • true se d está entre o início e o fim (inclusive)
    • false if d é antes do início ou depois do fim .
    • NaN se uma ou mais datas forem ilegais.
  • datas.convert

    Usado pelas outras funções para converter sua entrada em um objeto de data. A entrada pode ser

    • uma data -objeto: A entrada é retornada como está.
    • uma matriz : Interpretada como [ano, mês, dia]. O mês da nota é 0-11.
    • um número : Interpretado como número de milissegundos desde 1 de janeiro de 1970 (um registro de data e hora)
    • uma string : Vários formatos diferentes são suportados, como "AAAA / MM / DD", "MM / DD / AAAA", "31 de janeiro de 2009" etc.
    • um objeto : Interpretado como um objeto com atributos de ano, mês e data. O mês da nota é 0-11.

.

// Source: http://.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

Antes de comparar o objeto Dates , tente definir seus milissegundos como zero, como Date.setMilliseconds(0); .

Em alguns casos em que o objeto Date é criado dinamicamente no javascript, se você continuar imprimindo o Date.getTime() , verá a mudança de milissegundos, o que impedirá a igualdade de ambas as datas.


Comparar datas em JavaScript é muito fácil ... O JavaScript tem um sistema de comparação embutido para datas que o torna tão fácil de fazer a comparação ...

Basta seguir estes passos para comparar o valor de 2 datas, por exemplo, você tem 2 entradas, cada uma com um valor de Data em String e você pode compará-las ...

1. você tem 2 valores de string que você obtém de uma entrada e você gostaria de compará-los, eles são como abaixo:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Eles precisam ser Date Object para serem comparados como valores de data, então simplesmente convertê-los para data, usando new Date() , eu apenas re-atribuí-los para simplificar a explicação, mas você pode fazê-lo como quiser:

date1 = new Date(date1);
date2 = new Date(date2);

3. Agora simplesmente compare-os, usando o > < >= <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true


Comparar somente dia (ignorando o componente de tempo):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Uso:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}

De longe, o método mais fácil é subtrair uma data da outra e comparar o resultado.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);

Digamos que você tenha os objetos de data A e B, obtenha seu valor de tempo de EPOC e subtraia para obter a diferença em milissegundos.

var diff = +A - +B;

Isso é tudo.


Olá, aqui está o meu código para comparar datas. No meu caso, estou fazendo uma verificação para não permitir a seleção de datas anteriores.

var myPickupDate = <pick up date> ;
var isPastPickupDateSelected = false;
var currentDate = new Date();

if(currentDate.getFullYear() <= myPickupDate.getFullYear()){
    if(currentDate.getMonth()+1 <= myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                        if(currentDate.getDate() <= myPickupDate.getDate() || currentDate.getMonth()+1 < myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                                            isPastPickupDateSelected = false;
                                            return;
                                        }
                    }
}
console.log("cannot select past pickup date");
isPastPickupDateSelected = true;

Os operadores relacionais <= >= podem ser usados ​​para comparar datas JavaScript:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

No entanto, os operadores de igualdade == != === !== não podem ser usados ​​para comparar (o valor de) datas because :

  • Dois objetos distintos nunca são iguais para comparações estritas ou abstratas.
  • Uma expressão que compara Objetos só é verdadeira se os operandos fizerem referência ao mesmo Objeto.

Você pode comparar o valor de datas para igualdade usando qualquer um destes métodos:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Tanto Date.getTime() quanto Date.valueOf() retornam o número de milissegundos desde 1º de janeiro de 1970, 00:00 UTC. Tanto a função Number quanto o operador unary + chamam os métodos valueOf() nos bastidores.


Para criar datas a partir de texto livre em Javascript, você precisa analisá-lo no objeto Date ().

Você poderia usar Date.parse () que usa texto livre tenta convertê-lo em uma nova data, mas se você tiver controle sobre a página, eu recomendaria 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 .

Uma vez que você tenha uma data como outras pessoas apontaram, você pode usar aritmética simples para subtrair as datas e convertê-las novamente em um número de dias dividindo o número (em segundos) pelo número de segundos em um dia (60 * 60 * 24 = 86400).


Só para adicionar mais uma possibilidade às muitas opções existentes, você poderia tentar:

if (date1.valueOf()==date2.valueOf()) .....

... o que parece funcionar para mim. Claro que você tem que garantir que ambas as datas não são indefinidas ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

Dessa forma, podemos garantir que uma comparação positiva seja feita se ambos estiverem indefinidos também, ou ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

... se você preferir que eles não sejam iguais.


Subtraia duas datas para obter a diferença em milissegundos, se você receber 0 , é a mesma data

function areSameDate(d1, d2){
    return d1 - d2 === 0
}

Uma versão melhorada do código postado por "alguns"

/* Compare the current date against another date.
 *
 * @param b  {Date} the other date
 * @returns   -1 : if this < b
 *             0 : if this === b
 *             1 : if this > b
 *            NaN : if a or b is an illegal date
*/ 
Date.prototype.compare = function(b) {
  if (b.constructor !== Date) {
    throw "invalid_date";
  }

 return (isFinite(this.valueOf()) && isFinite(b.valueOf()) ? 
          (this>b)-(this<b) : NaN 
        );
};

uso:

  var a = new Date(2011, 1-1, 1);
  var b = new Date(2011, 1-1, 1);
  var c = new Date(2011, 1-1, 31);
  var d = new Date(2011, 1-1, 31);

  assertEquals( 0, a.compare(b));
  assertEquals( 0, b.compare(a));
  assertEquals(-1, a.compare(c));
  assertEquals( 1, c.compare(a));

qual formato?

Se você construir um objeto Javascript Date , basta subtraí-los para obter uma diferença de milissegundos (edit: ou apenas compare-os):

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true

você usa esse código,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

E também confira este link http://www.w3schools.com/js/js_obj_date.asp


Nota - Comparar apenas parte da data:

Quando comparamos duas datas em javascript. Leva horas, minutos e segundos também em consideração .. Então, se nós só precisamos comparar apenas a data, esta é a abordagem:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

Agora: if date1.valueOf()> date2.valueOf() funcionará como um encanto.


RESPOSTA CURTA

Aqui está uma função que retorna {boolean} se a partir de dateTime> para dateTime Demo em ação

var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
   return new Date(dtmfrom).getTime() >=  new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true

Explicação

jsFiddle

var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

Já que agora você está tendo o datetime no tipo number, você pode compará-los com qualquer operação Comparison

(>, <, =,! =, ==,! ==,> = AND <=)

Então

Se você estiver familiarizado com a C# Custom Date e Time Format String, essa biblioteca deverá fazer exatamente a mesma coisa e ajudá-lo a formatar sua data e hora dtmFRM esteja você passando a string de data e hora ou o formato unix.

Uso

var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21

DEMO

tudo que você tem a fazer é passar qualquer um desses formatos pacificados no arquivo js da biblioteca


O objeto Date fará o que você quiser - construa um para cada data e compare-os usando o > , < , <= ou >= .

Os operadores == != , === e !== exigem que você use date.getTime() como em

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

para ser claro apenas verificar a igualdade diretamente com os objetos de dados não vai funcionar

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Eu sugiro que você use drop-downs ou alguma forma restrita semelhante de entrada de data em vez de caixas de texto, no entanto, para que você não se encontre no inferno de validação de entrada.


function datesEqual(a, b)
{
   return (!(a>b || b>a))
}

var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates

var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function

var input_date="2015/04/22 11:12 AM";

var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime   = new Date(Date.parse(input_date));

if (inputDateTime <= currentDateTime){
    //Do something...
}

function formatDate(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';

    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    hours   = hours < 10 ? '0'+hours : hours ;

    minutes = minutes < 10 ? '0'+minutes : minutes;

    var strTime = hours+":"+minutes+ ' ' + ampm;
    return  date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
    (date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
    date.getDate()) + " " + strTime;
}




compare