2012-06-01 3 views
0

Я выводящего дату в формате GB в браузере: 01/06/2012 15:50:01 -03:00 (1 июня 2012)DateTime вопрос локализации с timeago

Это делается на сервере в C# с DateTimeOffset.ToString()

Я хотел бы использовать jQuery.timeago в эту дату. Все работает отлично, за исключением одной проблемы: jQuery.timeago разбирает выше дату как 01/06/2012 15:50:01 -03:00 (Jan 6, 2012)

Одним из решений является просто сделать DateTimeOffset.ToString(formatStringHere), но это должно работать локали agnostically, поэтому я не уверен, что это решение будет работать.

+0

Возможно ли использовать http://msdn.microsoft.com/en-us/library/bb335841.aspx для получения строки, которую распознает jQuery.timeago? – glarkou

+0

jQuery.timeago использует javascript new Date() – Kay

+0

Если вы собираетесь использовать timeago на нем, почему вы выводите дату в этом формате? Вы могли бы просто вывести его в ожидаемом формате timeago ... В противном случае вы могли бы скрыть дату в правильном формате в атрибуте данных, jQuery получить к ней доступ и манипулировать им с помощью timeago –

ответ

1

Вы не можете полагаться на бесступенчатый метод DateTimeOffset.ToString() как культурно-агностик. Я бы предложил использовать спецификатор формата «туда и обратно» ("O" или "o"), чтобы форматировать дату однозначно по стандарту ISO 8601 (чтобы он правильно обрабатывался во всех культурах), сохраняя информацию о часовом поясе.

Из MSDN:

DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0); 
DateTimeOffset dateOffset = new DateTimeOffset(date1, 
    TimeZoneInfo.Local.GetUtcOffset(date1)); 
Console.WriteLine(dateOffset.ToString("o")); 
// Displays 2008-04-10T06:30:00.0000000-07:00 

timeago сайт, как представляется, указывают, что он поддерживает ISO 8601

Edit: Формат "o" спецификатор эквивалентно следующий пользовательский формат строки:

"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz" 

Если вы хотите ограничить свою точность миллисекундой НСР, вы можете настроить его так:

DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0); 
DateTimeOffset dateOffset = new DateTimeOffset(date1, new TimeSpan(-7, 0, 0)); 
Console.WriteLine(dateOffset.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz")); 
// Displays 2008-04-10T06:30:00.000-07:00 
+0

Это было бы лучшим решением, если бы у timeago не было странное регулярное выражение даты. Я закончил вычисление его до миллисекунды и написал собственный метод Parse() в timeago. Спасибо за это, хотя – Kay

0

Использование ISO-8601 стандарт: YYYY-MM-ДДTчч: мм: ss.sssZ общаться DateTime в C# и Jquery. Средство использует два значения для отображения и один JQuery.

Смежные вопросы