2013-07-30 22 views
29

Mam funkcję w JavaScript, która odbiera C# DateTime od MVC. Jeśli data jest pusta, powinna powrócić "-", jeśli jest to poprawna data, powinna zwrócić sformatowaną datę.Konwertuj C# DateTime na JavaScript Data

WAŻNE: Nie można wysłać daty w innym formacie z C#.

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(); 
    } 

Czy istnieje lepszy sposób, aby porównać jeżeli data jest C# nowy DateTime?

A jak analizować i zwracać datę w formacie "rrrr/MM/dd"?

+1

Jaki jest kod przekształcenie go na stronie C#? Na przykład może być specyficzna dla kultury w każdym miejscu, w którym znajduje się serwer. –

+0

"Duplikat" http://stackoverflow.com/questions/1056728/formatowanie-a-date-in-javascript –

+0

Kod po stronie serwera to tylko CheckDate (@ model.Dated) To tylko obiekt DateTime C#. –

Odpowiedz

35

Biorąc pod uwagę wydajność, z którą utknąłeś, nie mogę wymyślić lepszego sposobu na złapaniez 0 po stronie javascript.

Date.parse powinien pracować dla potrzeb analizowania, ale zwraca liczbę milisekund, więc trzeba owinąć Data konstruktora wokół niego:

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

Dla data powrotu, po prostu chcesz

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

(date.getMonth i date.getDate są indeksowane 0 zamiast 1 indeksowane).

Fiddle http://jsfiddle.net/GyC3t/

EDIT Dzięki złapać JoeB za, pozwól mi zrobić korektę. Funkcja date.getMonth() jest zindeksowana 0, ale funkcja date.getDate() jest 1-indeksowana. Skrzypce "działało" z +1, ponieważ date.getMonth działa w czasie lokalnym, czyli przed czasem UTC. Nie sprawdziłem poprawnie dokumentów i po prostu dodałem 1, i zadziałało to z skrzypcami.

Bardziej właściwy sposób to zrobić:

Dla data powrotu, po prostu chcesz

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

(date.getMonth jest 0-indeksowane podczas date.getDate jest 1-indeksowane ale podatne na strefy czasowej różnice)

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

+1

To było świetne !! Dzięki. –

+3

Miesiące z datowania Javascript są 0 indeksowane, ale dzień jest 1 zindeksowany. – JoeB

+0

@JoeB Wow. To było okropne ze mnie. Dzięki za złapanie tego! –

1

używam następujących zdać Javascript Date int o C#:

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

Więc jeśli masz liczbę milisekund od C#, powinno być coś takiego:

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