Analyser la chaîne DateTime en JavaScript

94

Quelqu'un sait-il comment analyser la chaîne de date au format requis dd.mm.yyyy?

Azat
la source
Voulez-vous créer un nouvel objet de date à partir d'une chaîne dans ce format?
Kieran Hall

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]);
Jonathan Fingland
la source
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/

Mecalito
la source
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))
Adriaan Stander
la source
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");
ruche
la source
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 );
user3444722
la source
2

Utiliser l'objet Date:

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

Donner: 917902800000

HotJard
la source
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;
}
Martin Staufcik
la source
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)
Bachas
la source
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