TLDR: Вы не можете надежно преобразовать это значение только для даты, вместо этого отправьте строку ...
... или, по крайней мере, так должны начинаться почти все эти ответы.
Есть ряд проблем с конверсией, которые происходят здесь.
Это дата без времени
Что-то, что всем, похоже, не хватает, это сколько конечных нулей в вопросе - это почти наверняка началось как дата без времени:
/Date(1224043200000)/
При выполнении этого из консоли javascript в качестве новой даты (на основе многих ответов)
new Date(1224043200000)
Вы получаете:
Первоначальный аскер был, вероятно, в EST и имел чистую дату (sql) или DateTime (не DateTimeOffset) с полночью.
Другими словами, здесь подразумевается, что часть времени не имеет смысла. Однако, если браузер выполняет это в том же часовом поясе, что и сервер, который его сгенерировал, это не имеет значения, и большинство ответов работают.
Битовый часовой пояс
Но, если вы выполняете приведенный выше код на машине с другим часовым поясом (например, PST):
Вы заметите, что мы теперь на день позади в этом другом часовом поясе. Это не будет исправлено путем изменения сериализатора (который по-прежнему будет включать часовой пояс в формате iso)
Проблема
Дата (sql) и DateTime (.net) у них нет часового пояса, но как только вы конвертируете их во что-то, что делает (в данном случае javascript выводит через json), действие по умолчанию в .net - это принятие текущего часового пояса.
Число, которое создает сериализация, составляет миллисекунды с эпохи Unix или:
(DateTimeOffset.Parse("10/15/2008 00:00:00Z") - DateTimeOffset.Parse("1/1/1970 00:00:00Z")).TotalMilliseconds;
Что-то, что new Date () в javascript принимает в качестве параметра. Epoch из UTC, так что теперь у вас есть информация о часовом поясе, хотите вы этого или нет.
Возможные решения:
Возможно, было бы безопаснее создать строковое свойство для вашего сериализованного объекта, который представляет ТОЛЬКО дату - строка с «15.10.2008» маловероятна перепутать кого-либо еще с этим беспорядком. Хотя даже там вы должны быть осторожны при разборе: https://stackoverflow.com/a/31732581
Однако, в духе предоставления ответа на заданный вопрос, как есть:
function adjustToLocalMidnight(serverMidnight){
var serverOffset=-240; //injected from model? <-- DateTimeOffset.Now.Offset.TotalMinutes
var localOffset=-(new Date()).getTimezoneOffset();
return new Date(date.getTime() + (serverOffset-localOffset) * 60 * 1000)
}
var localMidnightDate = adjustToLocalMidnight(new Date(parseInt(jsonDate.substr(6))));
Это зависит от обстоятельств.
Используете ли вы SSRS 2005 или 2008?
Для 2005 года: Щелкните правой кнопкой мыши пустую область в области конструктора, выберите «Свойства»> «Макет». Теперь переключите значения ширины / высоты страницы ([21 и 29,7] на [29,7 и 21]). Кроме того, измените размер области дизайна в соответствии с макетом. т.е. потяните правый край на ~ 17 см, а нижний край на ~ 24,7 см (для портрета) или правый край на 24,7 см и нижний край на 21 см (для альбомной ориентации). Подробнее см. в этой статье
Для 2008 года: Щелкните правой кнопкой мыши пустую область в области конструктора, выберите «Свойства отчета»> «Параметры страницы»> «Пейзаж / Портрет».
У вас есть высота / ширина страницы и интерактивная высота в свойствах отчета. Вы не говорите «Портрет» или «Пейзаж».
К сожалению, это неочевидно, и это « Общие сведения о разбиении на страницы в службах Reporting Services » объясняет лишь косвенно.