Вы можете найти день недели с mondayStartWeek
или sundayStartWeek
, в зависимости от того, считаете ли вы, что неделя начинается в понедельник или в воскресенье. Обе функции находятся в Data.Time.Calendar.OrdinalDate
.
λ> snd $ mondayStartWeek $ fromGregorian 2017 10 3
2
В приведенном выше примере возвращаемое значение равно 2
, что указывает на второй день недели. Поскольку функция называется mondayStartWeek
, понедельник является первым днем, поэтому 2
соответствует вторнику. Это относится к 3 октября 2017 года.
Предупреждение относительно номера недели
Обе функции возвращают кортеж, где вторым элементом является день недели. Насколько я могу судить, это заслуживает доверия.
Однако первым элементом является номер недели в году. Будьте осторожны с этим, потому что правила нумерации недели являются политическими. Если я правильно помню, в США неделя 1 - это неделя, в которой содержится 1 января. Это не относится к Дании, где я живу. Здесь неделя 1 - первая неделя, на которую выпадает четверг в новом году. Это может означать, что 31 декабря может выпасть на 1-й неделе следующего года. IIRC, это правило для многих других европейских стран. В некоторые годы номера американских и европейских недель совпадают, а в некоторые годы - нет.