2016-06-18 6 views
1

Ich mag verschiedene Datumsformate zu einem einzigen Format konvertieren zu können, ieto yyyy-mm-dd, so zum Beispiel:konvertieren verschiedene Datumsformate yyyy-mm-dd in Javascript

20-10-1975 -> 1975-10-20 (dd-mm-yyyy -> yyyy-mm-dd) 

01-25-1961 ->1961-01-25 (mm-dd-yyyy -> yyyy-mm-dd) 

1991-10-25 -> 1991-10-25 (yyyy-mm-dd remains yyyy-mm-dd) 

wenn möglich auch mit der Zeitkomponente, so zum Beispiel:

20-10-1975 13:15:22 -> 1975-10-20 13:15:22 

der Grund ist, ich ein Array zu Terminen in der Lage sein wollen, zu sortieren, aber manchmal muss ich mit verschiedenen Formaten umgehen, die ich nicht kontrollieren.

Gibt es eine Funktion, um dies zu erreichen?

PS Ich bin mir bewusst, dass manchmal ein Datum mehrdeutig sein kann, zum Beispiel 6-5-2015 kann 6. Mai oder 5. Juni sein, aber mir geht es gut, solange die Sortierung funktioniert.

+0

Bisher Split auf Trennzeichen sortieren, neu anordnen und sortieren in jjjj-mm-tt hh: mm: ss bestellen. Keine Notwendigkeit für Bibliothek – mplungjan

+0

Können Sie ein einheitliches Datumsformat haben? – Rajesh

+1

Wie möchten Sie mit '06-07-2008' umgehen? –

Antwort

3

Sie können sich Intl.DateTimeFormat ansehen. Es mag dir helfen, aber nie benutzt, ich kann dir nicht helfen.

Für einfache Fälle können Sie es manuell mit Hilfe von Strings split tun. Sie müssen Ihren Parser für jedes andere Format implementieren, das Sie verwenden möchten. Hier ist ein einfaches Beispiel. Ich entschied mich dafür, an einer Date vorbei zu gehen, um Parsing und Formatierung unabhängig zu machen, aber Sie können wählen, nur die Teile neu zu ordnen.

function parse(dateString){ 
 
    var parts = dateString.split("-"); 
 
    return new Date(parts[2], parts[1], parts[0]); 
 
} 
 

 
function format(date){ 
 
    var month = date.getMonth(); 
 
    var day = date.getDay(); 
 
    return [ 
 
    date.getFullYear(), 
 
    month > 9 ? month : "0" + month, 
 
    day > 9 ? day : "0" + day 
 
    ].join("-"); 
 
} 
 

 
var date = parse("20-10-1975"); 
 
console.log(format(date));

Allerdings würde ich empfehlen, eine Bibliothek zu verwenden, die Sie einige Zeit sparen und geben Sie eine größere Flexibilität auf Kosten einer zusätzlichen Abhängigkeit. Eine der bekanntesten Bibliotheken, um Daten zu manipulieren, ist zum Beispiel moment.js. Hier ist ein Beispiel, wie Sie es verwenden können.

var ex1 = moment("20-10-1975", "DD-MM-YYYY") 
 
    .format("YYYY-MM-DD"); 
 
console.log(ex1); 
 

 
var ex2 = moment("01-25-1961", "MM-DD-YYYY") 
 
    .format("YYYY-MM-DD"); 
 
console.log(ex2); 
 

 
var ex3 = moment("1991-10-25", "YYYY-MM-DD") 
 
    .format("YYYY-MM-DD"); 
 
console.log(ex3); 
 

 
var ex4 = moment("20-10-1975 13:15:22", "YYYY-MM-DD HH:mm:ss") 
 
    .format("YYYY-DD-MM HH:mm:ss"); 
 
console.log(ex4);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

Wenn Sie in mehrere Formate anzupassen versuchen wollen (wie es Ihrem Fall zu sein scheint), können Sie dies auch tun. Geben Sie einfach die Reihenfolge an, in der momentjs versuchen sollte, Ihre Zeichenfolge zu erkennen. Hier ist ein Beispiel.

function formatDate(dateStr, inputFormats, outputFormat){ 
 
    // Format without the hours, minutes and seconds. 
 
    inputFormats = inputFormats || [ 
 
    "YYYY-MM-DD", 
 
    "DD-MM-YYYY", 
 
    "MM-DD-YYYY" 
 
    ]; 
 
    outputFormat = outputFormat || "YYYY-MM-DD"; 
 
    
 
    // Try to match without the hours, minutes and seconds. 
 
    var mDate = moment(dateStr, inputFormats, true); 
 
    if(mDate.isValid()){ 
 
    // If that worked, give the result without them. 
 
    return mDate.format(outputFormat); 
 
    } 
 
    
 
    // Create format with hours, minutes and seconds. 
 
    var extendedInputFormats = inputFormats.map(function(f){ 
 
    return f + " HH:mm:ss"; 
 
    }); 
 
    // Try to match with hours, minutes and seconds. 
 
    mDate = moment(dateStr, extendedInputFormats, true); 
 
    if(mDate.isValid()){ 
 
    // If that worked, give the result with them. 
 
    return mDate.format(outputFormat + " HH:mm:ss"); 
 
    } 
 
} 
 

 
console.log("20-10-1975 =>", formatDate("20-10-1975")); 
 
console.log("01-25-1961 =>", formatDate("01-25-1961")); 
 
console.log("1991-10-25 =>", formatDate("1991-10-25")); 
 
console.log("20-10-1975 13:15:22 =>", formatDate("20-10-1975 13:15:22"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

+0

Um das Datum zu sortieren, teilen Sie das Trennzeichen, ordnen Sie es neu und sortieren Sie es in der Reihenfolge JJJJ-MM-TT. Keine Notwendigkeit für eine Bibliothek – mplungjan

+1

Natürlich. Sie können das Rad immer neu codieren. –

+1

Hallo; danke für die Antwort; aber diese Beispiele nehmen an, dass das Anfangsdatum bereits bekannt ist, oder? So wie ich es möchte, wenn das ursprüngliche Format nicht in der Funktion enthalten sein muss. – user2022678

Verwandte Themen