powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить понедельник и пятницу для любой даты
5 сообщений из 5, страница 1 из 1
Получить понедельник и пятницу для любой даты
    #39283002
Dennis S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Ситуация следующая - ведется понедельный учет рабочего времени, но по разным контрактам конец недели может быть как субботой (американский стандарт), так и воскресеньем (европейский стандарт).

Пишу функции
Код: plaintext
getMonday()
и
Код: plaintext
getFriday()
, но что-то окончательно запутался.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function getMonday(dtmDate As Date, strWeekEndDay As String) As Date
    getMonday = dtmDate - Weekday(dtmDate, IIf(strWeekEndDay = "Saturday", vbSaturday, vbSunday)) + IIf(strWeekEndDay = "Saturday", 3, 2)
End Function

Function getFriday(dtmDate As Date, strWeekEndDay As String) As Date
    getFriday = dtmDate - Weekday(dtmDate, IIf(strWeekEndDay = "Saturday", vbSaturday, vbSunday)) + IIf(strWeekEndDay = "Saturday", 7, 6)
End Function



Получается, что суббота и воскресенье неправильно обрабатываются - я на картинке отметил желтым, эти дни "слишком рано" переключаются.

Прошу любого совета. Пример базы вложу по просьбе.

Заранее благодарю.
...
Рейтинг: 0 / 0
Получить понедельник и пятницу для любой даты
    #39283062
Mina Anna Mazzini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub sb_Call_GetDoW()
Dim dLftMon As Date, dRgtFri As Date
Dim vbBoW As VbDayOfWeek
    vbBoW = vbSunday
    vbBoW = vbMonday
    Call sз_GetDoW(Date, vbBoW, dLftMon, dRgtFri)
    Stop
End Sub

Public Sub sp_GetDoW(ByVal pDate As Date, pBoW As VbDayOfWeek, pLM As Date, pRF As Date)
    pLM = pDate - Weekday(pDate, pBoW) - CLng(pBoW = vbSunday) + 1
    pRF = pLM + 4
End Sub
...
Рейтинг: 0 / 0
Получить понедельник и пятницу для любой даты
    #39283120
Dennis S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.

Вообще-то я просто крайне невнимателен:
Функция Weekday вторым аргументом просит начало , а не конец недели. Поправил так и всё работает.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function getMonday(dtmDate As Date, strWeekEndDay As String) As Date
    getMonday = dtmDate - Weekday(dtmDate, IIf(strWeekEndDay = "Saturday", vbSunday, vbMonday)) + IIf(strWeekEndDay = "Saturday", 2, 1)
End Function

Function getFriday(dtmDate As Date, strWeekEndDay As String) As Date
    getFriday = dtmDate - Weekday(dtmDate, IIf(strWeekEndDay = "Saturday", vbSunday, vbMonday)) + IIf(strWeekEndDay = "Saturday", 6, 5)
End Function
...
Рейтинг: 0 / 0
Получить понедельник и пятницу для любой даты
    #39283150
Mina Anna Mazzini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
* Вообще-то я просто крайне невнимателен
- Ошибку-то нашел ведь...

* и всё работает
- Оно не работает. Оно скрипит...

Дядя Билл старался... константы численные выдумывал...
... для того, чтобы юзеры мужественно переводили их в строки и еще сравнивали с другими, тоже численными и тоже мужественно переведенными в строки. Да еще по паре раз одно и то же в одной и той же не только функции, а строке кода! ССЗБ

Я тебе показал, как это дОлжно делать.
Не хочешь вникать - ворочай строки, скрипи дальше, куле...
.
...
Рейтинг: 0 / 0
Получить понедельник и пятницу для любой даты
    #39283366
Dennis S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я не против - и сейчас как раз оптимизирую всё это.

Увы, базу проектировали до меня человека четыре, а то и пять. Да, конец недели хранится строкой, как и много других очень интересных полей.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить понедельник и пятницу для любой даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]