2010-07-12 5 views
6

Ich bemerkte, Date.Parse kann nicht nur 2 Ziffern Daten verarbeiten.Wie man javascript Datum.parse kurze Jahre verstehen kann?

sagen, dass ich dies denke Datum

mm/dd/yy = 7/11/20 

Parse haben es = 7/11/1920 ist. Kannst du es so einstellen, dass es das zweitausendste verwendet? Wie es ist irgendwie komisch, ich habe die jquery u.i Date Picker und wenn Sie 7/11/20 eingeben, wird es herauszufinden, 2020.

Also wäre es schön, wenn Date.parse mithalten könnte ich lieber habe sie beide nicht wissen, was vor sich geht oder beide wissen was los ist dann habe man das weiß und man weiß das nicht.

+1

Die beste Lösung wäre es, die vollständige, aktuelle und immer. – BrunoLM

+0

@BurnoLM Ich stimme zu, deshalb habe ich ein Datepicker-Popup, wenn das Textfeld angeklickt wird, aber ein Benutzer kann immer noch aus irgendeinem Grund manuell eingeben, was ich aus irgendeinem Grund "7/11/20" getan habe. Es wirkt sich nicht auf meinen C# -Code aus, da er feststellt, dass es 2020 ist, aber einige meiner Dropdown-Listen werden auf der Grundlage des Datums gefiltert. Also, wenn ich es beheben kann, möchte ich auch auch aus irgendeinem Grund jquery validate "date" denkt nicht, dass es ein Validierungsfehler ist und in einem gültigen Format ist. – chobo2

Antwort

5

Nicht, dass ich bewusst bin. Aber man kann immer das Jahr einstellen:

YourDate="7/11/20"; 
DateObj=new Date(YourDate.replace(/(\d\d)$/,"20$1")); 

alert(DateObj); 

This code in action.

Edit: Der folgende Code behandeln sowohl vollständige als auch kurzen Jahren:

YourDate="7/11/2020"; 
DateObj=new Date(YourDate.replace(/\/(\d\d)$/,"/20$1")); 

alert(DateObj); 

This code in action.

+1

Das ist ein guter Trick! – BrunoLM

+0

Was macht das? Ich bin irgendwie mit $ 1 verwechselt, auch der Benutzer könnte immer ein volles Datum angeben. Dann schlägt das fehl. Wie könnte es geändert werden? – chobo2

+0

@BrunoLM - Danke.:) –

0

So Ihre Frage ist, ob Sie die Art ändern können, wie Date.parse arbeitet, so dass zweistellige d Ates werden als Daten nach dem Jahr 2000 interpretiert?

Ja, es kann getan werden, einfach Schatten Date.parse mit Ihrer eigenen Parse-Funktion.

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

Natürlich ist es in der Regel eine sehr schlechte Idee Eigenschaften beschatten (einschließlich ‚Methoden‘ aka Funktionseigenschaften) von Host-Objekten, weil sie falsches Verhalten in anderen Skripten verursachen werden, dass diese Eigenschaften erwarten, dass eine bestimmte Art und Weise zu arbeiten, .

Es ist auch eine schlechte Idee, zweistellige Daten zu verwenden, aber das liegt außerhalb Ihrer Kontrolle. Wenn es nicht außerhalb Ihrer Kontrolle liegt, würde ich empfehlen, zweistellige Daten einfach zu vergessen und stattdessen den Wert für das ganze Jahr zu verwenden.

+1

Nur um zu erzwingen: das ist sehr, sehr gefährlich !! – BrunoLM

+0

Ya Ich denke nicht, dass ich das tun werde lol. – chobo2

-1

Wie wäre es damit?

var date = '7/11/20'; 
var idx = date.lastIndexOf('/') + 1; 
date = date.substr(0,idx) + '20' + date.substr(idx); 
var result = Date.parse(date);​ 
alert(result); 

oder diese Version, die zuerst für ein YYYY-Format prüfen wird.

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))​;​ 
+0

Funktioniert nicht sehr gut Sie wissen ... '7/11/2000 = 7/11/202000' – BrunoLM

+0

@BrunoLM - Ich denke, die Annahme ist, dass das YY-Format immer verwendet wird. Einfach genug, um einen Test für ein YYYY-Format hinzuzufügen. – RightSaidFred

+0

Nun könnte ein Benutzer YY oder YYYY eingeben. Ich bin mir nicht sicher, ob YYY nicht weiß, ob das funktioniert. Ich weiß, die ersten 2 C# können herausfinden und analysieren und so kann datepicker. – chobo2

0

Hier ist meine Lösung:

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; 
    } 
} 
Verwandte Themen