Расчет рабочих дней между двумя датами в SSRS 2016

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

Расчет рабочих дней между двумя датами в SSRS 2016

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Чтобы проверить, установите текстовое поле на =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 как выходные дни.

Привет @Hannover Fist Я нахожусь в Великобритании, и в моих языковых настройках указано, что понедельник — первый день недели. Однако, когда я запускаю =WEEKDAY(TODAY), он показывает 5, поскольку сегодня четверг, а если перевернуть его, получается 1 для воскресенья ... Я сбит с толку :(

Bucki 30.05.2019 10:39

В моем случае мне пришлось ввести CDate(format(Fields!FromDate.Value,"MM-dd-yyyy")), чтобы дни рассчитывались правильно .... не знаю, почему это было проблемой.

Bucki 30.05.2019 15:53

@Bucki - очевидно, ваше поле даты на самом деле является текстовым, и его необходимо преобразовать в правильный тип даты. Вы должны использовать только CDATE(Fields!FromDate.Value) для значения и обернуть его в функцию FORMAT, если хотите показать дату =FORMAT(CDATE(Fields!FromDate.Value),"MM-dd-yyyy") или использовать MM-dd-yyyy в свойстве FORMAT текстового поля.

Hannover Fist 30.05.2019 17:07

Я также установил для свойства FromDate формат MM-dd-yyyy, но он все равно не работал, если я не использовал `CDATE(), и теперь он работает с отступом :) спасибо за ваш отзыв

Bucki 31.05.2019 08:56
Ответ принят как подходящий

РЕШЕНИЕ

В моем случае мне пришлось ввести 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)

Другие вопросы по теме