Как я могу сравнить дату UTC, созданную в Javascript, с датой UTC в C #? - PullRequest
3 голосов
/ 28 июля 2011

Я пытаюсь создать дату UTC в JavaScript на одном сервере и передать ее через строку запроса URL-адреса на другой сервер, где C # может взять эту строку запроса, распознать ее как дату и сравнить с новой датой C # UTC -и это оказывается сложнее, чем я, хотя (если у меня только один из тех дней).Я не вижу никаких других вопросов по stackoverflow, задающих этот вопрос (в списках «похожих заголовков» или «похожих вопросов», которые отображаются при вводе вопроса).

Для создания данных в JavaScript я используюниже, на основе этой статьи w3schools :

var currentDate = new Date();
var  day = currentDate.getUTCDate();
var month = currentDate.getUTCMonth();
var year = currentDate.getUTCFullYear();
var hours = currentDate.getUTCHours();
var minutes = currentDate.getUTCMinutes();
var seconds = currentDate.getUTCSeconds();
var milliseconds = currentDate.getUTCMilliseconds();

var expiry = Date.UTC(month,day,year,hours,minutes,seconds,milliseconds);

результаты выглядят следующим образом 1311871476074

Итак, в C # как мне взять это значение из строки запросаи

  1. преобразовать его в правильную дату, а
  2. сравнить с переменной UTC DateTime на основе C #?

Любые советы, исправления в моей логике/ код или ссылки на статьи будут с благодарностью.

Кевин

ОБНОВЛЕНИЕ
Оба ответа ниже помогли мне решить мою проблему: Люк помог ссторона C #, и Рэй помог с JavaScript - к сожалению, я не могу пометить их обоих как ответы, но я бы хотел!

Ответы [ 2 ]

5 голосов
/ 28 июля 2011

Метод JavaScript UTC возвращает количество миллисекунд с 00:00:00 UTC 1 января 1970 года. Чтобы преобразовать эти миллисекунды обратно в DateTime в C #, вам просто нужно добавить их на эту оригинальную "эпоху":

string rawMilliseconds = Request.QueryString["expiry"];

if (string.IsNullOrWhiteSpace(rawMilliseconds))
    throw new InvalidOperationException("Expiry is null or empty!");

long milliseconds;
if (!long.TryParse(rawMilliseconds, out milliseconds))
    throw new InvalidOperationException("Unable to parse expiry!");

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

DateTime expiry = epoch.AddMilliseconds(milliseconds);
3 голосов
/ 28 июля 2011

Объект datetime представляет момент времени и обычно представлен внутри как число миллисекунд с начала эпохи. В JavaScript для получения этого значения на текущее время проще использовать

new Date().getTime()

Теперь у вас есть только число (или строка, содержащая число), которое вы можете передать в свое приложение C # и создать объект DateTime из.

Для этого я могу отослать вас к C # конвертировать UTC int в объект DateTime (у Джона Скита есть ответ.):)

...