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

Как преобразовать объект даты с даты в тики

Как мне преобразовать объект даты JavaScript в тики? Я хочу использовать тики, чтобы получить точную дату для моего приложения С# после синхронизации данных.

4b9b3361

Ответ 1

Если вы хотите преобразовать свой объект datetime в универсальные тики, используйте следующий фрагмент кода

    var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);

Есть метки 621355968000000000 эпох для javascript от Ist Jan 1900 - Ist Jan 1970. И здесь 10000 - тики за миллисекунду.

Ответ 2

Тип JavaScript Date - это эпоха Unix: полночь 1 января 1970 года.

Тип события NET DateTime - полночь 1 января 0001 года.

Вы можете перевести JavaScript Date объект на .NET ticks следующим образом:

var yourDate = new Date();  // for example

// the number of .net ticks at the unix epoch
var epochTicks = 621355968000000000;

// there are 10000 .net ticks per millisecond
var ticksPerMillisecond = 10000;

// calculate the total number of .net ticks for your date
var yourTicks = epochTicks + (yourDate.getTime() * ticksPerMillisecond);

Ответ 3

Если по "тикам" вы имеете в виду что-то вроде "миллисекунд с эпохи", вы можете вызвать ".getTime()".

var ticks = someDate.getTime();

Из документации MDN возвращается значение

Целое число, представляющее число миллисекунд с 1 января 1970 года 00:00:00 UTC (эпоха Unix).

Ответ 4

Расширение принятого ответа, так как добавляется 635646076777520000.

Javascript new Date().getTime() or Date.now() вернет число миллисекунд, переданных из midnight of January 1, 1970.

В .NET(источник в разделе Remarks)

Тип значения DateTime представляет даты и время со значениями от 00:00:00 (полночь), 1 января 0001 года Anno Domini (общая эра) до 23:59:59, 31 декабря 9999 года нашей эры (CE) в григорианском календаре.

621355968000000000 - значение тиков от midnight Jan 1 01 CE до midnight Jan 1 1970

Итак, в .NET

  Console.Write(new DateTime(621355968000000000))
  // output 1/1/1970 12:00:00 AM

Следовательно, чтобы преобразовать время javascript в .Net ticks

 var currentTime = new Date().getTime();

 // 10,000 ticks in 1 millisecond
 // jsTicks is number of ticks from midnight Jan 1, 1970
 var jsTicks = currentTime * 10000;

 // add 621355968000000000 to jsTicks
 // netTicks is number of ticks from midnight Jan 1, 01 CE
 var netTicks = jsTicks + 621355968000000000;

Теперь, в .NET

 Console.Write(new DateTime(netTicks))
 // output current time

Ответ 5

Дата в JavaScript также содержит смещение. Если вам нужно избавиться от него, используйте следующее:

return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);

Я использую решение Skeikh и вычитаю тики для "смещения".

Ответ 6

Это должно быть date.GetTime(). Имейте в виду, что С# и Javascript, использующие разные начальные даты, так используют что-то подобное для преобразования в С# DateTime.

public static DateTime GetDateTime(long jsSeconds)
{
    DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return unixEpoch.AddSeconds(jsSeconds);
}