#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.
Источники:
- https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks?view=net-5.0
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
В 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, чтобы соответствовать этому. 🙂