Analyser la chaîne DateTime en JavaScript


Réponses:


140

Voir:

Code:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

mmm, mais comment vérifier que strDate a une valeur invalide comme "30.30.2000"?
Dr. No

2
@ user674887, vous pouvez comparer les valeurs après analyse. par exemple dateParts [1] -1 == date.getMonth ()
Jonathan Fingland

Si vous avez une date à la fois TIME comme ceci: "2014-05-20T16: 43: 56.71-06: 00" var partesFecha = solicitud.CreatedDate.split ("T") [0] .split ("-"); var createdDate = nouvelle date (partesFecha [0], (partesFecha [1] - 1), partesFecha [2]); Date du premier extrait avant T et plus tard, année, mois et jour.
RolandoCC

Je ne peux pas croire que vous deviez utiliser un fractionnement pour obtenir le format de date attendu en javascript
Claudiu Creanga

Quelqu'un d'autre trouve-t-il étrange que l'article de référence de Mozilla sur l'objet Date lui-même dise "Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."?
NanoWizard

51

Si vous utilisez jQuery UI, vous pouvez formater n'importe quelle date avec:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/


21
+1 Je ne vois pas totalement hors de portée, JavaScript et JQuery sont une combinaison courante.
djna le

Une réponse ne doit pas s'appuyer sur une bibliothèque qui n'est ni balisée ni mentionnée dans l'OP. Utiliser jQuery comme bibliothèque de dates est excessif lorsqu'une fonction à 3 lignes peut faire le même travail.
RobG

9

Nous utilisons ce code pour vérifier si la chaîne est une date valide

var dt = new Date(txtDate.value)
if (isNaN(dt))

le format donné ne correspond pas au format requis par developer.mozilla.org/en/Core_JavaScript_1.5_Reference/... (et donc ce constructeur Date ne suffira pas)
Jonathan Fingland

Cela ne teste pas du tout les dates valides, cela teste simplement si le constructeur Date peut créer une date valide à partir de l'entrée. Les deux ne sont pas la même chose.
RobG

6

réfs: http://momentjs.com/docs/#/parsing/string/

Si vous utilisez moment.js, vous pouvez utiliser le mode "string" + "format"

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

ex:

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

2
Dans la plupart des cas, MomentJS est exagéré, car l'utilisation de JavaScript pur ne nécessite que des centaines d'octets, tandis que MomentJS est gzippé à 12,4 Ko. Pratique pour les développeurs mais ralentit le site Web. Ça ne vaut pas.
Raptor

3

J'ai été utilisé en suivant le code dans IE. (Compatible IE8)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );


2

Utiliser l'objet Date:

var time = Date.parse('02.02.1999');
document.writeln(time);

Donner: 917902800000


16
new Date(Date.parse('02.02.1999'))
Duke

+1 For Duke commentaires sur new Date(Date.parse('02.02.1999'))pour Javascript
Jack

Renvoie NaN dans au moins deux navigateurs actuels. Voir Pourquoi Date.parse donne-t-il des résultats incorrects?
RobG

@ Duke— new Date(Date.parse('02.02.1999'))produira des résultats identiques à new Date('02.02.1999'), y compris la date invalide dans certains navigateurs. L'utilisation de l'analyseur intégré est sans doute la pire façon d'analyser un horodatage.
RobG

2

Cette fonction gère également la date 29.2.2001 invalide.

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}

0

vous pouvez formater la date en faisant simplement ce type de code. En javascript.

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)

Vous êtes censé utiliser javascript et non jquery car il n'y a pas de balise jquery
Sagar

heureux ... le sens est de simplement comprendre le senario
Bachas

Bien. Je ne pense pas que votre exemple soit différent de celui donné par Martin Staufcik. En fait, sa réponse a une logique supplémentaire pour gérer les dates invalides.
Sagar le

Martin Staufcik gère ces conditions qui ne se produisent généralement pas. pouvez-vous me donner un calendrier qui peut donner des invalides.Pourquoi nous devrions écrire un code si long lorsque nous pouvons gérer à court terme. Ce serait beaucoup mieux si Martin Staufcik donne également pour gérer la date avec l'heure à gérer.
Bachas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.