2013-07-30 8 views
29

Ich habe eine Funktion in Javascript, die eine C# DateTime von MVC erhält. Wenn das Datum Null ist, sollte es "-" zurückgeben, wenn es ein gültiges Datum ist, sollte es das formatierte Datum zurückgeben.Convert C# DateTime nach Javascript Datum

WICHTIG: Es ist nicht möglich, das Datum in einem anderen Format als C# zu senden.

Javascript:

function CheckDate(date) { 

    if (date == "Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Daylight Time)") 
    return "-"; 
    else { 
    var dat = new Date(date); 
    return dat.getFullYear() + dat.getMonth() + dat.getDay(); 
    } 

Gibt es eine bessere Art und Weise zu vergleichen, wenn das Datum der C# New Datetime?

Und wie kann ich das Datum im "JJJJ/MM/TT" -Format analysieren und zurückgeben?

+1

Was ist der Code auf der C# Seite konvertieren? Zum Beispiel könnte es kulturspezifisch sein, wo auch immer der Server ist. –

+0

"Duplizieren" http://stackoverflow.com/questions/1056728/formatting-a-date-in-javascript –

+0

Der Code auf der Serverseite ist nur CheckDate (@ model.Dated) Es ist nur ein DateTime C# -Objekt. –

Antwort

35

Angesichts der Ausgabe, mit der Sie stecken bleiben, kann ich keinen besseren Weg vorstellen, um eine DateTime von 0 auf der Javascript-Seite zu fangen.

Date.parse sollte für Ihre Parsing Bedürfnisse arbeiten, aber es gibt die Anzahl der Millisekunden, so müssen Sie um eine Date-Konstruktor wickeln:

var date = new Date(Date.parse(myCSharpString)); 

Für das Rückgabedatum, geben Sie einfach

wollen
date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getDate() + 1); 

(date.getMonth und date.getDate sind 0 indizierten anstelle von 1-indexiert.)

Fiddle: http://jsfiddle.net/GyC3t/

EDIT Dank JoeB Fang, lassen Sie mich eine Korrektur tun. Die date.getMonth()-Funktion ist 0-indiziert, aber die date.getDate()-Funktion ist 1-indiziert. Die Geige funktionierte mit +1, weil date.getMonth in der lokalen Zeit vor UTC arbeitet. Ich habe die Dokumente nicht richtig überprüft und nur 1 hinzugefügt, und es hat mit der Geige funktioniert.

Eine richtige Art und Weise, dies zu tun ist:

Für die Rückkehr Datum, Sie wollen einfach

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getUTCDate()); 

(date.getMonth 0-indiziert, während date.getDate 1-indiziert aber anfällig für Zeitzone Unterschiede)

Fiddle. http://jsfiddle.net/GyC3t/25/

+1

Das war großartig !! Vielen Dank. –

+3

Javascript Datum Monate sind 0 indiziert, aber der Tag sind 1 indiziert. – JoeB

+0

@JoeB Wow. Das war schrecklich von mir. Danke, dass du das erwischt hast! –

1

ich folgendes passieren ein Javascript Datum int verwenden o C#:

var now = new Date(); 
var date = (now.getTime()/86400000) - (now.getTimezoneOffset()/1440) + 25569; 

Also, wenn Sie die Anzahl der Millisekunden von C# zu erhalten, sollte es so etwas wie diese:

var csharpmilliseconds; 
var now = new Date(); 
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset()/1440) - 25569) * 86400000);