определить, наступит ли новая неделя в coldfusion
-
16-09-2019 - |
Вопрос
Мне нужно определить, содержит ли набор дат две разные недели.
Например:
При возврате набора записей из базы данных, содержащих дату, должно быть что-то, позволяющее различать разные недели.
<cfloop query="datesExample">
<cfif DateDiff("d",DateFormat(lastDate),DateFormat(OriginalDate)) GTE 7>
<hr />
</cfif>
<p>#OrginalDate#</p>
<cfset lastDate = DateFormat(OrginalDate) />
</cfloop>
На мой взгляд, это вся логика, которую мне нужно добавить, чтобы определить, наступит ли новая неделя.
Хотя никаких результатов от этого я не получаю.
У кого-нибудь есть идеи?
Обновлять:
Это мой фактический оператор if:
<cfif DayofWeek(lastShiftDate) NEQ DayOfWeek(Time_In) AND DateDiff("d",lastShiftDate, Time_In) GTE 7>
Решение 6
Это было гораздо проще, чем я думал.Все, что мне нужно было сделать, это получить значение первого свидания.Так, <cfif query.RecordCount EQ 1><cfset firstDate = Now() /></cfif>
а затем выполните dateDiff() с помощью LastShiftDate
Спасибо всем за помощь.
Другие советы
Я бы использовал QueryAddColumn, чтобы добавить дополнительный столбец в конец вашего запроса, затем выполнить цикл и установить начало недели для каждой записи в запросе.Что-то вроде этого:
<cfset datesExample = QueryNew("lastshiftdate", "date") />
<cfset QueryAddRow(datesExample) />
<cfset QuerySetCell(datesExample, "lastshiftdate", "2009-01-15") />
<cfset QueryAddRow(datesExample) />
<cfset QuerySetCell(datesExample, "lastshiftdate", "2009-01-20") />
<cfset QueryAddColumn(datesExample, "StartofWeek", "time", ArrayNew(1)) />
<cfloop query="datesExample">
<cfset QuerySetCell(datesExample, "StartofWeek", DateAdd("d", -(DayOfWeek(lastshiftdate) - 1), lastshiftdate), CurrentRow) />
</cfloop>
<cfdump var="#datesExample#">
Затем, когда вы используете cfoutput, вы можете просто сгруппировать по столбцу StartofWeek, не выполняя всей глупой условной логики.
Дэн
когда день недели dateA отличается от дня недели dateB, а их DateDiff больше 7?
Тогда dateA и dateB находятся на разных неделях?
Представленный вами код содержит несколько синтаксических ошибок.Если вы скопировали его из источника, вы можете попробовать отключить перехват ошибок, который не позволяет вам видеть ошибки.
Во-первых, обратимся к синтаксису:Ваш cfif не закрыт.DateFormat() принимает два аргумента — объект даты и маску даты.Если этого нет в блоке cfoutput, вы просто отобразите буквальную #OrginalDate#.
Чтобы разобраться с логикой:
Я предполагаю, что OriginalDate — это поле в возвращаемом запросе.
Я не совсем уверен, что вы пытаетесь сделать.Ваш код печатал бы горизонтальную линию вместо даты каждый раз, когда между двумя записями было более 6 дней.Однако вы никогда не напечатаете горизонтальную линию, если даты расположены ближе друг к другу.Итак, если бы в базе данных были понедельник/среда/пятница, вы бы никогда не получили HR, потому что дата будет равна двум или трем дням, а не семи.
Существует несколько подходов к решению этой проблемы.Если вы уточните свою цель, возможно, мы сможем помочь вам лучше.Например, что определяет новую неделю?Сб/Вс в полночь?С первой даты в запросе?Что вы пытаетесь отобразить?
Проверьте Функция дня недели
Проверьте Неделя функция:Из объекта даты/времени определяет номер недели в году.