2015-10-27 16 views
9

Ho una data generata da binari e una data generata da jQuery.Confronto di data jQuery con Rails

Le stampe rotaie data in quanto tali: 2002-10-27

e la data di stampa jQuery in quanto tale: Tue Aug 14 2001 00:00:00 GMT-0500 (CDT)

voglio verificare se la data jQuery è maggiore o minore di rotaie data. Ma non importa le date, la data jQuery viene sempre interpretata come più grande della data della rotaia.

Perché è, e come posso confrontare con successo le due date?

var year = 2001 
var month = 9 
month -- 
var day = 14 
var date = new Date(year, month, day); 
<% @date = Date.today - 18.years %> 
if(date > <%= @date %>) { 
    //this code is always executed, no matter what dates I choose 
} 

UPDATE:

In realtà ho appena capito il problema è che permette solo le date prima del 1969. Ho inteso il codice per consentire solo le date più di 18 anni. Qualcuno sa perché la differenza?

UPDATE 2:

Ho testato l'uscita tempo di 5 Ottobre 2000 nella mia console js e Rails console, e danno le stesse prime sei cifre, ma la console js aggiunge tre zeri.

var year = 2000 
var month = 10 
month -- 
var day = 5 
var date = new Date(year, month, day); 
date.getTime(); 
=> 970722000000 


Date.new(2000,10,5).to_time.to_i 
=> 970722000 
+0

utilizzare la stringa per creare un oggetto Date, o semplicemente utilizzare JavaScript metodi di data per creare la data di confronto – charlietfl

+0

@charlietfl La prego di elaborare un po '? Cosa intendi con "la tua corda"? –

risposta

3

Quindi il problema è che la console di js stampa le ore in millisecondi, motivo per cui stavo ottenendo 973404000000, contro 973404000 nella console di rails.

Tutto quello che dovevo fare era dividere il tempo js per 1000, e il confronto tra il tempo js e il tempo delle rotaie funziona perfettamente.

var year = 2000 
var month = 10 
month -- 
var day = 5 
var date = (new Date(year, month, day).getTime()/1000); 
date 
=> 970722000 


Date.new(2000,10,5).to_time.to_i 
=> 970722000 
+0

Un altro modo: Javascript può fornire data come 'var date = new Date(); date.toLocaleDateString(); // "01/11/2015" 'in questo formato e quindi lo si confronta facilmente con il lato server. – vinayakj

1

Si potrebbe provare a convertirli entrambi in data e ora unix e confrontarli. Se non ti importa delle ore e semplicemente delle date, dovrebbe funzionare.

var year = 2001 
var month = 9 
var day = 14 
var date = new Date(year, month, day); 
<% @date = Date.today - 18.years %> 
if (date.getTime() > <%= @date.to_time.to_i %>) { 
    // do something 
} 
+0

Hm, questo è strano. Il modo in cui intendevo il codice, dovrebbe impedire l'accesso a chiunque abbia meno di 18 anni. Ma a quanto pare il problema è che permette solo a chiunque sia nato nel 1969 o prima. Qualche idea sul perché sarebbe? –

+0

Ah, devi avere un problema con l'analisi della data. Se mai si ottiene la data 12-31-1969 quando si analizza una data, quella si risolve in Unix timestamp 0. Verifico che tutto stia analizzando correttamente in JS e in Ruby. – yez

+0

Come posso verificare? –

1

Vorrei utilizzare una libreria come Moment.JS per gestire le esigenze di analisi della data sul lato client. E poi invia al server qualcosa in un formato standard come ISO8601 per assicurarti di non avere problemi nell'errata interpretazione.

Anche Epoch time funzionerà, ma come hai visto, devi avere l'onere di assicurarti che siano nelle stesse unità.

3

modelli User Data Format per Jquery data, per cambiare il formato della data in base alla data di rubino, o la seconda opzione è convertire il formato della data rubino in base alle jquery, utilizzando strftime.

0

al Confronto 2 date per me u possibile utilizzare moment.js

Con ur data rotaie creare una data momento. Fai lo stesso con la tua data jquery.

U può confrontare facilmente le 2 date ora.

Se u bisogno di spiegazioni, vedi questo post: moment-js-date-time-comparison