Почему я не могу преобразовать миллисекунды из C # в JavaScript Date Object? - PullRequest
0 голосов
/ 01 марта 2012

Я написал функцию в .net, которая возвращает дату. Мне нужно получить эту дату в объект Date в JavaScript.

Согласно https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date, я смогу вызвать new Date(x), где x - это количество миллисекунд в моей дате.

Поэтому я написал следующее в моем коде ASP.net MVC 3:

ViewBag.x = new TimeSpan(someDate.Ticks).TotalMilliseconds;

Затем в JavaScript я получаю следующий код:

new Date( 63461023004794 )

Представляемая дата должна быть 1 января 2012 года.

Однако дата, которую читает JavaScript, - 31 декабря 3980 года.

Что здесь не так?

Ответы [ 5 ]

7 голосов
/ 02 марта 2012

Ваш код .NET дает вам количество миллисекунд с 1 января 0001 года.

Конструктор JavaScript принимает количество миллисекунд с 1 января 1970 года.

Самый простойвероятно, вам стоит изменить код .NET на:

ViewBag.x = (someDate - new DateTime(1970, 1, 1)).TotalMilliseconds;
3 голосов
/ 02 марта 2012

someDate.Ticks измеряется с 1 января ст , 0001.

Даты Javascript занимают миллисекунды с 1 января ст , 1970 UTC.

1 голос
/ 02 марта 2012

Это связано с тем, что структура DateTime считает такты с 0001-01-01, а объект Date считает миллисекунды с 1970-01-01.

Примите разницу от 1970-01-01 какмиллисекунды:

ViewBag.x = (someDate - new DateTime(1970, 1, 1)).TotalMilliseconds;
0 голосов
/ 20 сентября 2016

Правила:

C# Ticks меры с 0001-01-01.

Javascript dates занимают миллисекунды с 1970-01-01, UTC.

Тогда вынужно вычесть 2665800000 миллисекунды из вашей C# DateTime переменной (someDate):

2665800000 - это постоянная : отличаетсяот 1970-01-01 до 0001-01-01 в виде миллисекунд

Использование:

ViewBag.x = (someDate - new DateTime(2665800000)).TotalMilliseconds;
0 голосов
/ 02 марта 2012

Unix-календарь эпоха - 1970-01-01 00:00:00 UTC.Предполагая, что ваше время уже UTC (не дано):

DateTime someDate   = GetSomeDate() ;
DateTime UNIX_EPOCH = new DateTime(1970,1,1) ;
Timespan ts         = someDate - UNIX_EPOCH ;

должен сделать васЗатем передайте javascript, свойство TotalMilliseconds TimeSpan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...