2013-07-30 4 views
29

У меня есть функция в Javascript, которая получает C# DateTime из MVC. Если дата равна нулю, она должна возвращать «-», если это действительная дата, она должна вернуть дату форматирования.Преобразование C# DateTime в Javascript Date

ВАЖНО: Невозможно отправить дату в другом формате с 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(); 
    } 

Есть ли лучший способ сравнения, если дата является C# Новый DateTime?

И как я могу разобрать и вернуть дату в формате «yyyy/MM/dd»?

+1

Что код преобразования его на C# стороне? Например, он может быть специфичным для конкретной культуры, где бы сервер ни был. –

+0

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

+0

Код на стороне сервера - это просто CheckDate (@ model.Dated) Это всего лишь объект DateTime C#. –

ответ

35

Учитывая выход, вы застряли, я не могу придумать лучшего способа поймать DateTime из 0 на стороне javascript.

Date.parse должны работать для ваших нужд синтаксического анализа, но он возвращает количество миллисекунд, так что вам нужно обернуть Дата конструктор вокруг него:

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

На дату возвращения, вы просто хотите

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

(date.getMonth и date.getDate являются 0-индексированные вместо 1-индексироваться.)

Фидл: http://jsfiddle.net/GyC3t/

EDIT Благодаря уловом JOEB, позвольте мне сделать коррекцию. Функция date.getMonth() является 0-индексированной, но функция date.getDate() является 1-индексированной. Сценарий «работал» с +1, потому что date.getMonth работает в локальное время, что до UTC. Я не правильно проверял документы и просто добавил 1, и он работал со скрипкой.

Более правильный способ сделать это:

На дату возвращения, вы просто хотите

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

(date.getMonth 0 индексированные, а date.getDate является 1-индексироваться, но восприимчив к часовому поясу различия)

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

+1

Это было здорово !! Благодарю. –

+3

Javascript месяцев индексируются 0, но день 1 проиндексирован. – JoeB

+0

@JoeB Ничего себе. Это было ужасно. Спасибо, что поймали это! –

1

Я использую следующие передать Date Int Javascript о C#:

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

Так что, если вы получите количество миллисекунд от C#, это должно быть что-то вроде этого:

var csharpmilliseconds; 
var now = new Date(); 
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset()/1440) - 25569) * 86400000); 
Смежные вопросы