come analizzare una stringa di data formattata “gg / mm / aaaa” o “gg-mm-aaaa” o “gg-mmm-aaaa” utilizzando JavaScript o jQuery

Possibile duplicato:
Estendere JavaScript Date.parse per consentire DD / MM / YYYY (date non formattate negli Stati Uniti)?
Convertire la stringa gg-mm-aaaa fino ad oggi

Inserita una data nella casella di testo, ad esempio: 05/09/1985 , e volevo convertirla in formato 05-Sep-1985 (gg-MMM-aaaa). Come potrei ottenere questo? Si noti che il formato sorgente può essere dd-mm-yyyy o dd/mm/yyyy o dd-mmm-yyyy .

Snippet di codice:

  function GetDateFormat(controlName) { if ($('#' + controlName).val() != "") { var d1 = Date.parse($('#' + controlName).val()); if (d1 == null) { alert('Date Invalid.'); $('#' + controlName).val(""); } var array = d1.toString('dd-MMM-yyyy'); $('#' + controlName).val(array); } } 

Questo codice restituisce il 9 maggio 1985 ma voglio il 5 settembre 1986 . Grazie.

Potresti voler usare la libreria helper come http://momentjs.com/ che avvolge l’object data javascript nativo per manipolazioni più semplici

Quindi puoi fare cose come:

 var day = moment("12-25-1995", "MM-DD-YYYY"); 

o

 var day = moment("25/12/1995", "DD/MM/YYYY"); 

quindi operare sulla data

 day.add('days', 7) 

e per ottenere la data nativa di javascript

 day.toDate(); 

Aggiornare

Qui sotto hai detto:

Spiacenti, non posso prevedere il formato della data prima, dovrebbe essere come gg-mm-aaaa o gg / mm / aaaa o gg-mmm-aaaa, infine volevo convertire tutto questo formato nel formato gg-MMM-aaaa.

Questo cambia completamente la domanda. Sarà molto più complesso se non puoi controllare il formato. Non c’è nulla di incorporato in JavaScript che ti consente di specificare un formato di data. Ufficialmente, l’unico formato di data supportato da JavaScript è una versione semplificata di ISO-8601 : yyyy-mm-dd , anche se in pratica quasi tutti i browser supportano anche yyyy/mm/dd . Ma a parte questo, devi scrivere il codice da solo o (e questo ha molto più senso) usare una buona libreria. Probabilmente userò una libreria come moment.js o DateJS (anche se DateJS non è stato mantenuto in anni).


Risposta originale :

Se il formato è sempre dd/mm/yyyy , allora questo è banale:

 var parts = str.split("/"); var dt = new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10)); 

split suddivide una stringa sul delimitatore specificato. Quindi usiamo parseInt per convertire le stringhe in numeri, e usiamo il new Date costruttore new Date per creare una Date da quelle parti: La terza parte sarà l’anno, la seconda parte del mese e la prima parte del giorno. Date utilizza numeri di mese a base zero e quindi dobbiamo sottrarre uno dal numero del mese.

Date.parse riconosce solo formati specifici e non hai la possibilità di dirgli quale sia il tuo formato di input. In questo caso si pensa che l’input sia nel formato mm/dd/yyyy , quindi il risultato è sbagliato.

Per risolvere questo problema, è necessario analizzare l’input manualmente (ad es. Con String.split ) e quindi build manualmente un object Date o utilizzare una libreria più completa come datejs .

Esempio per l’analisi manuale:

 var input = $('#' + controlName).val(); var parts = str.split("/"); var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 

Esempio utilizzando date.js:

 var input = $('#' + controlName).val(); var d1 = Date.parseExact(input, "d/M/yyyy"); 

Prova questo:

  function GetDateFormat(controlName) { if ($('#' + controlName).val() != "") { var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1')); if (d1 == null) { alert('Date Invalid.'); $('#' + controlName).val(""); } var array = d1.toString('dd-MMM-yyyy'); $('#' + controlName).val(array); } } 

RegExp replace .replace(/([0-9]+)\/([0-9]+)/,'$2/$1') cambia la posizione giorno / mese.

Vedi questo http://blog.stevenlevithan.com/archives/date-time-format

puoi fare qualsiasi cosa con la data.

file: http://stevenlevithan.com/assets/misc/date.format.js

aggiungi questo al tuo codice html usando il tag script e per usarlo puoi usarlo come:

 var now = new Date(); now.format("m/dd/yy"); // Returns, eg, 6/09/07