2012-03-08 7 views

risposta

2

Grazie a tutti! Non ho trovato nessuno di questi metodi per funzionare, ma ho finalmente funzionato. Ho dovuto modificare un pochino;)

L'ho fatto suddividendo la data utilizzando getMonth, getDate e getYear e analizzandolo e quindi confrontandolo. Funziona esattamente come voglio:

Date.parse(document.getElementById("DateId").value) < Date.parse(dateToday.getMonth() + "/" + dateToday.getDate() + "/" + dateToday.getYear()) 
1

Guarda le Date object docs.

È necessario un oggetto Date con la data immessa (utilizzando il metodo di costruzione oi metodi setMonth ecc.) E uno con la data corrente (nessun argomento per il costruttore). È quindi possibile utilizzare getTime per ottenere la data/ora UNIX su entrambi gli oggetti e confrontarli.

0

Dai uno sguardo allo http://www.datejs.com/. Ti aiuterà con la manipolazione della data standard

+0

Datejs è eccessivo per il confronto delle date semplice, soprattutto quando la data è in un formato noto. Non vale la pena includere * un'altra * libreria. Mi è sembrata più un'app di giocattoli - all'inizio impressionante, ma quando si provano alcune rappresentazioni di date in linguaggio naturale del mondo reale, non è abbastanza robusta. Ad esempio, "dieci in punto", "6 questa sera", "due giorni da oggi". Non è stato aggiornato dal 2007, quindi non c'è molta speranza che questa robustezza venga aggiunta. – gilly3

+0

Bene, ho capito cosa intendi, ma fare roba di date in JavaScript può richiedere molto tempo se vuoi farlo bene. Penso che l'uso di una libreria esterna valga i costi aggiuntivi, ma sono d'accordo sul fatto che deve essere mantenuto e stabile. Personalmente non ho fatto molto lavoro con datejs, quindi posso solo supporre che tu abbia ragione. Costruire questo tipo di cose da soli è controproducente e tutto il nuovo codice contiene bug, quindi cerco sempre di riutilizzare materiale esistente e testato. – koenpeters

3

Converti la stringa in una data utilizzando new Date(dateString). Quindi normalizza la data odierna per omettere le informazioni sull'ora usando today.setHours(0, 0, 0, 0). Poi si può solo confrontare le date quando si dispone sopra:

var date = new Date(dateInput); 
if (isNaN(date)) { 
    alert("please enter a date"); 
} 
else { 
    var today = new Date(); 
    today.setHours(0, 0, 0, 0); 
    date.setHours(0, 0, 0, 0); 
    var dateTense = "present"; 
    if (date < today) { 
     dateTense = "past"; 
    } 
    else if (date > today) { 
     dateTense = "future"; 
    } 
    alert("You entered a " + dateTense + " date"); 
} 

Demo:http://jsfiddle.net/w2sJd/

+0

Questo ha funzionato per me. –

-3
function compareDate(inputDateString) { 
    var inputDate, now; 
    inputDate = new Date(inputDateString); 
    now = new Date(); 
    if (inputDate < now) { 
    console.log("You entered past date"); 
    } 
    else if (inputDate > now) { 
    console.log("You entered future date"); 
    } 
    else if (inputDate === now) { 
    console.log("You entered present date"); 
    } 
    else { 
    console.log("please enter a date"); 
    } 
} 
+3

Questo non funzionerà per la data odierna per due motivi. Innanzitutto, stai confrontando per riferimento anziché per valore. 'inputDate' non fa riferimento allo stesso oggetto Date come' now', sebbene i loro valori possano essere uguali. Secondo, una data creata analizzando 'MM/gg/aaaa 'avrà ore, minuti, secondi e ms tutti uguali a' 0', mentre 'nuova Data()' conterrà informazioni temporali (tranne che per 1 ms al giorno) . – gilly3

Problemi correlati