c# против javascript: Datetime.Now.Галочки против Date.now() возвращает разные значения

#javascript #c#

Вопрос:

Я думал, что с вызовом c# :

 var x = DateTime.Now.Ticks 
 

и с помощью вызова Javascript:

 var x = Date.now()
 

Я должен был получить тот же результат.

Но на c# я получаю: 6375930069696672760

В то время как Javascript возвращает: 1623750547564

(Они не относятся к одному и тому же дню, но должны быть очень близки. Однако оба значения сильно различаются)

Я думал, что оба возвращают значение в миллисекундах с первого января 0:00 1970 года?

Так почему же обе ценности так различны? И как я могу перевести вызов c# на javascript?

Комментарии:

1. Почему вы думаете, что они должны быть одинаковыми? Date.now() (в нижнем регистре n) возвращает количество миллисекунд, прошедших с эпохи UNIX developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

2. И что делает C#? Я думал, что это должно быть то же самое. Как я могу сделать вызов javascript таким же, как вызов c#=

3. DateTime.Now.Ticks() кажется, подсчитывается количество наносекунд с эпохи UNIX.

4. I thought it should be the same. Почему ты так подумал?

5. @evolutionxbox ваше право. Поэтому мой вопрос должен быть таким: как я могу получить то же значение в javascript?

Ответ №1:

Для c# Ticks :

Значение этого свойства представляет собой количество 100-наносекундных интервалов, прошедших с 12:00:00 полуночи 1 января 0001 года по григорианскому календарю

Для Javascript Date :

Объекты даты JavaScript представляют один момент времени в независимом от платформы формате. Объекты даты содержат число, представляющее миллисекунды с 1 января 1970 года по UTC.

Источники:


В C#, чтобы получить количество миллисекунд с определенного момента времени (например, 1/1/1970), вы можете использовать:

 var datum = new DateTime(1970,1,1);
var msSinceDatum = DateTime.Now.Subtract(datum).TotalMilliseconds;
 

Запустив это несколько секунд назад, он дал ответ 1623751729961.4617 , в то DateTime.now() время как в javascript дал 1623751739058 . Должно быть достаточно близко для ваших нужд.


Примечание. Вы также можете использовать DateTimeOffset.ToUnixTimeMilliseconds

 var msSinceUnix = DateTimeOffset.Now.ToUnixTimeMilliseconds();
 

Идти другим путем (C# указывает на дату javascript) немного сложнее.

 var ticks = 637593490842364954; // ticks retrieved a few moments ago
var ticksToMicrotime = ticks / 10000;
var epochMicrotimeDiff = Math.abs(new Date(0, 0, 1).setFullYear(1)); 
var date = new Date(ticksToMicrotime - epochMicrotimeDiff);
console.log(date) 

Комментарии:

1. Твое право. Как я могу получить одно и то же значение в javascript с 0001 года?

2. @JuTo, ты не можешь. Дата Javascript не уходит так далеко в прошлое

3. Могу ли я, может быть, просто «добавить» оставшиеся галочки, чтобы сделать даты одинаковыми? Я должен сопоставить код, используемый в c#, с моим приложением javascript (web), поэтому мне нужно получить значения, которые по крайней мере близки.

4. @JuTo, может быть, обновление решит вашу проблему

5. Привет, спасибо. Это как раз наоборот: приложение на c# появилось первым. Таким образом, все даты записываются в основном с 0 года. Мне нужна дата моего javascript, чтобы соответствовать этому. 🙂