Ориентация страницы отчета SSRS

TLDR: Вы не можете надежно преобразовать это значение только для даты, вместо этого отправьте строку ...

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

Есть ряд проблем с конверсией, которые происходят здесь.

Это дата без времени

Что-то, что всем, похоже, не хватает, это сколько конечных нулей в вопросе - это почти наверняка началось как дата без времени:

/Date(1224043200000)/

При выполнении этого из консоли javascript в качестве новой даты (на основе многих ответов)

new Date(1224043200000)

Вы получаете:

enter image description here

Первоначальный аскер был, вероятно, в EST и имел чистую дату (sql) или DateTime (не DateTimeOffset) с полночью.

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

Битовый часовой пояс

Но, если вы выполняете приведенный выше код на машине с другим часовым поясом (например, PST):

enter image description here

Вы заметите, что мы теперь на день позади в этом другом часовом поясе. Это не будет исправлено путем изменения сериализатора (который по-прежнему будет включать часовой пояс в формате 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))));

18
задан Christian Mark 8 October 2013 в 06:44
поделиться

2 ответа

Это зависит от обстоятельств.

Используете ли вы SSRS 2005 или 2008?

Для 2005 года: Щелкните правой кнопкой мыши пустую область в области конструктора, выберите «Свойства»> «Макет». Теперь переключите значения ширины / высоты страницы ([21 и 29,7] на [29,7 и 21]). Кроме того, измените размер области дизайна в соответствии с макетом. т.е. потяните правый край на ~ 17 см, а нижний край на ~ 24,7 см (для портрета) или правый край на 24,7 см и нижний край на 21 см (для альбомной ориентации). Подробнее см. в этой статье

Для 2008 года: Щелкните правой кнопкой мыши пустую область в области конструктора, выберите «Свойства отчета»> «Параметры страницы»> «Пейзаж / Портрет».

21
ответ дан 30 November 2019 в 06:59
поделиться

У вас есть высота / ширина страницы и интерактивная высота в свойствах отчета. Вы не говорите «Портрет» или «Пейзаж».

К сожалению, это неочевидно, и это « Общие сведения о разбиении на страницы в службах Reporting Services » объясняет лишь косвенно.

2
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: