Я использую приведенный ниже код, найденный на этом сайте. Это как-то работает, но не должным образом, когда FromDate выпадает на пятницу, поскольку добавляет еще один день сверху.
Смотрите скриншот для демонстрации.
Что не так в самом коде?
= (DateDiff(DateInterval.day,Fields!FromDate.Value,Fields!UntilDate.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Fields!FromDate.Value,Fields!UntilDate.Value)*2)
- IIF(Weekday(Fields!FromDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!FromDate.Value,1) = 7,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 1,1,0)
- IIF(Weekday(Fields!UntilDate.Value,1) = 7,1,0)
Код в порядке. Проблема в том, что ваш компьютер может использовать другой первый день недели в настройках региона и языка, чем компьютер, на котором был создан код (или мой).
Чтобы проверить, установите текстовое поле на =WEEKDAY(TODAY)
. Компьютер, на котором работает этот код, имеет 1 как воскресенье, что делает сегодняшний день (среду) 4. Я предполагаю, что вы получите 3.
Если ваш первый день недели — понедельник, вам нужно изменить дни недели на 6 и 7, а не на 1 и 7, которые используются в настоящее время.
= (DateDiff(DateInterval.day,Parameters!START.Value,Parameters!END.Value)+1)
- (DateDiff(DateInterval.WeekOfYear,Parameters!START.Value,Parameters!END.Value)*2)
- IIF(Weekday(Parameters!START.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!START.Value,1) = 7,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 6,1,0)
- IIF(Weekday(Parameters!END.Value,1) = 7,1,0)
Если это суббота, вам нужно использовать 1 и 2 как выходные дни.
В моем случае мне пришлось ввести CDate(format(Fields!FromDate.Value,"MM-dd-yyyy"))
, чтобы дни рассчитывались правильно .... не знаю, почему это было проблемой.
@Bucki - очевидно, ваше поле даты на самом деле является текстовым, и его необходимо преобразовать в правильный тип даты. Вы должны использовать только CDATE(Fields!FromDate.Value)
для значения и обернуть его в функцию FORMAT, если хотите показать дату =FORMAT(CDATE(Fields!FromDate.Value),"MM-dd-yyyy")
или использовать MM-dd-yyyy
в свойстве FORMAT текстового поля.
Я также установил для свойства FromDate формат MM-dd-yyyy, но он все равно не работал, если я не использовал `CDATE(), и теперь он работает с отступом :) спасибо за ваш отзыв
РЕШЕНИЕ
В моем случае мне пришлось ввести CDate(format(Fields!FromDate.Value,"MM-dd-yyyy"))
, чтобы дни рассчитывались правильно.
I had to use the CDATE() in the code:
=(DateDiff(DateInterval.day,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))+1)
-(DateDiff(DateInterval.WeekOfYear,CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),
CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")))*2)
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")),1) = 7,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 1,1,0)
- IIF(Weekday( CDate(format(Fields!UntilDate.Value,"MM-dd-yyyy")),1) = 7,1,0)
Привет @Hannover Fist Я нахожусь в Великобритании, и в моих языковых настройках указано, что понедельник — первый день недели. Однако, когда я запускаю
=WEEKDAY(TODAY)
, он показывает 5, поскольку сегодня четверг, а если перевернуть его, получается 1 для воскресенья ... Я сбит с толку :(