Javascript ASP.net формат даты без информации о часовом поясе - смещения часового пояса - PullRequest
2 голосов
/ 06 июля 2010

У меня есть клиентский JavaScript, который генерирует дату в JavaScript (new Date(2007,5,1)).

Мне нужно, чтобы эта дата была передана в скрытое поле, к которому может получить доступ код, стоящий позади.

Моя проблема заключается в том, что когда скрытое поле преобразуется в дату и время DotNet, это неправильное время. Это связано с тем, что JavaScript включает информацию о часовом поясе из браузера клиента.

DotNet использует эту информацию для пересчета времени на основе разницы между временем сервера и временем клиента.

То, что мне нужно от JavaScript - это просто год, месяц и день.

Я не хочу передавать 3 значения типа int в мой код, поскольку это будет серьезным изменением для всего приложения.

Какой лучший способ для меня это сделать?

Если я могу установить время UTC без информации о часовом поясе, я думаю, это может сработать.

Любая помощь приветствуется.

Ответы [ 4 ]

1 голос
/ 06 июля 2010

Вы можете использовать DateTimeOffset.ParseExact для анализа строки в значении DateTimeOffset, используя указанный вами формат:

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00";
        DateTimeOffset date = DateTimeOffset.ParseExact(dateString, "ddd MMM dd yyyy hh:mm:ss 'GMT'zzz", CultureInfo.InvariantCulture);

В кавычках необходимо указать GMT, иначе M будет интерпретироваться как символ формата.

К сожалению, невозможно игнорировать часть строкового значения.Если ваша строка содержит название часового пояса, вы должны сначала разделить его и получить часть без описания

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00 (Taipei Standard Time)";
        var parts=dateString.Split('(');
        string datePart = parts[0].TrimEnd();
        var date=DateTimeOffset.ParseExact(datePart,"ddd MMM dd yyyy hh:mm:ss 'GMT'zzz",CultureInfo.InvariantCulture);
1 голос
/ 06 июля 2010

демо

Если я правильно понял,

вам нужно .toDateString()

var date = new Date(2007,5,1);

document.write(date);
document.write("<br><br>versus<br><br>");
document.write(date.toDateString());

печать

Fri Jun 01 2007 00:00:00 GMT+0800 (Taipei Standard Time)

versus

Fri Jun 01 2007
0 голосов
/ 06 июля 2010

Я бы порекомендовал использовать спецификацию формата в C #, когда вы получаете значения в коде файла.Позвольте мне объяснить, что я имею в виду. Формат даты и времени для даты (...) в JavaScript выглядит следующим образом:

" вт 1 июня 11:12:15 UTC + 0530 2010 "

, что в C # будет переводиться в следующую строку формата - "ddd MMM d hh:mm:ss UTCzzz yyyy"

с этой строкой формата используйте DateTime.ParseExact(string <Hidden Field Value>, format, provider), чтобы получить правильное значение для datetime в C #.

Использовать провайдера как System.Globalization.CultureInfo.InvariantCulture.

0 голосов
/ 06 июля 2010

Вы можете создать строку из созданного вами объекта javascript Date - в нем есть методы getDate(), getMonth() и getFullYear(), которые можно использовать для создания точной строки Вы хотите в скрытом поле.

...