6
votes

Comment faire de la date javascript.parse Comprendre de courtes années?

j'ai remarqué date.parse code> ne peut pas gérer que 2 dates de 2 chiffres.

Dites que j'ai cette p>

mm/dd/yy = 7/11/20


2 commentaires

La meilleure solution serait de fournir la date totale, toujours.


@Burnolm Je suis d'accord C'est pourquoi j'ai une popup salepicker lorsque la zone de texte est cliquée, mais un utilisateur peut toujours pour une raison pour une raison manuellement de ce que j'ai fait "7/11/20" pour une raison quelconque. Il n'exploite aucun de mon code C # car il figure qu'il est de 2020 mais il vise certaines de mes listes de liste déroulante qui sont filtrées en fonction de la date. Donc, si je peux résoudre ce problème, je voudrais aussi aussi pour une raison quelconque JQuery Validate "Date" ne pense pas que c'est une erreur de validation et est dans un format valide.


4 Réponses :


5
votes

4 commentaires

Qu'est-ce que c'est ça? Je suis un peu confus avec 1 $ également que l'utilisateur pourrait toujours donner une date complète. Alors cela échoue. Alors, comment pourrait-il être modifié?


Le problème avec cette approche est si ils tapent, disent, 7/11/98, la date sera le 7/11/2098, ce qui n'est probablement pas ce qu'ils signifiaient, à moins que les dates qu'elles entrant sont toujours censées être dans le avenir dans votre situation particulière. Il doit y avoir une coupure quelque part pour des dates à deux chiffres pour travailler ... où la coupure est arbitraire, mais quelque part environ 50 pourrait avoir un sens ... mais vraiment, ne pas accepter des dates à deux chiffres du tout serait la meilleure idée que je pense. :)


@ chobo2 - Le 1 $ insère la valeur trouvée dans la RegEx (la partie (\ d \ d) , qui est à deux chiffres).


@ chobo2 - il n'y a pas de défaut. \ / (\ d \ d) essaie de correspondre à "code> / dd , où d est un chiffre. S'il y a une correspondance, il remplacera la correspondance avec / 20dd , si ce n'est le cas avec par exemple / 2015 , il n'y aura pas de remplacement.



0
votes

Donc, votre question est de savoir si vous pouvez changer la façon dont la date.parse fonctionne de sorte que les dates à deux chiffres à faible nombre soient interprétées comme dates après l'an 2000?

Oui, cela peut être fait, Simply Shadow Day.parse avec votre propre fonction d'analyse. P>

// don't do this!
Date.parse = function (str) { /* your parse routine here */ }


1 commentaires

Juste pour faire respecter: c'est très très dangereux !!



-1
votes

On dirait-il? XXX PRE>

ou cette version qui testera d'abord un format de Yyyy. P>

var date = '7/11/2020'; 
var idx = date.lastIndexOf('/') + 1;
if(date.substr(idx).length < 4) {
    date = date.substr(0,idx) + '20' + date.substr(idx);
}
var result = Date.parse(date);
alert(new Date(result))​;​


2 commentaires

@Brunolm - Je pense que l'hypothèse est que le format YY sera toujours utilisé. Assez facile pour ajouter un test pour un format de Yyyy.


Eh bien, un utilisateur pourrait taper chez Yy ou Yyyy. Je ne suis pas sûr de Yyy, je ne sais pas si cela fonctionne. Je sais que les 2 premiers C # peuvent figurer et analyser et donc sathayskicker.



0
votes

Voici ma solution:

function parseDate(stringValue)
{
    var date = new Date(stringValue);
    if (!isNaN(date.getTime()))
    {
        // if they typed the year in full then the parsed date will have the correct year, 
        // if they only typed 2 digits, add 100 years to it so that it gets translated to this century
        if (stringValue.indexOf(date.getFullYear()) == -1)
        {
            date.setFullYear(date.getFullYear() + 100);
        }

        return date;
    }
    else
    {
        return null;
    }
}


0 commentaires