Подтвердить что ты не робот

Преобразование С# DateTime в Javascript Date

У меня есть функция в Javascript, которая получает С# DateTime из MVC. Если дата имеет значение null, она должна возвращать "-", если она действительная дата, она должна вернуть форматированную дату.

ВАЖНО: Невозможно отправить дату в другом формате с С#.

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

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

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

4b9b3361

Ответ 1

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

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

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

Для даты возвращения вам просто нужно

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

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

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

ИЗМЕНИТЬ Благодаря захвату 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/

Ответ 2

Я использую следующее, чтобы передать дату Javascript в С#:

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

Итак, если вы получите количество миллисекунд из С#, это должно быть примерно так:

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