determinar se uma nova semana no ColdFusion
-
16-09-2019 - |
Pergunta
Eu preciso determinar se um conjunto de datas contêm duas semanas diferentes.
Por exemplo:
Ao retornar um conjunto de registros de um banco de dados que contém uma data, é necessário que haja algo para distinguir entre as diferentes semanas.
<cfloop query="datesExample">
<cfif DateDiff("d",DateFormat(lastDate),DateFormat(OriginalDate)) GTE 7>
<hr />
</cfif>
<p>#OrginalDate#</p>
<cfset lastDate = DateFormat(OrginalDate) />
</cfloop>
Para mim, este parece ser toda a lógica que eu precisaria para adicionar para determinar se há uma nova semana.
Embora, eu não estou recebendo qualquer resultado deste.
Alguém tem uma idéia?
Update:
Esta é a minha real if:
<cfif DayofWeek(lastShiftDate) NEQ DayOfWeek(Time_In) AND DateDiff("d",lastShiftDate, Time_In) GTE 7>
Solução 6
Era muito mais simples do que eu pensava. Tudo o que eu tinha a fazer era obter o valor da primeira data. Então, <cfif query.RecordCount EQ 1><cfset firstDate = Now() /></cfif>
e depois fazer um DATEDIFF () com o lastShiftDate
Obrigado pela ajuda de todos.
Outras dicas
Eu faria QueryAddColumn para adicionar uma coluna adicional para o final de sua consulta, em seguida, percorrer e definir o início da semana para cada registro na consulta. Algo parecido com isto:
<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#">
Em seguida, quando você usa o cfoutput, você pode simplesmente agrupar pela coluna StartofWeek sem fazer toda a lógica condicional pateta.
Dan
quando o dayofweek de Dateâ é diferente dayofweek de dateB, e sua DateDiff é maior do que 7?
Então Dateâ e dateB estão em diferentes semana?
O código apresentado tem vários erros de sintaxe. Se você copiou-lo de sua fonte, você pode tentar desligar o que quer que interceptação de erro está impedindo de ver os erros.
Em primeiro lugar, a sintaxe de endereço: Seu cfif não está fechada. DateFormat () recebe dois argumentos - o objeto data e a máscara de data. Se isto não é em um bloco cfoutput, você só vai exibir o literal #OrginalDate #.
Para abordar a lógica:
Estou assumindo OriginalDate é um campo no retorno de consulta.
Eu não sei exatamente o que você está tentando fazer. Seu código seria imprimir uma linha horizontal em vez da data qualquer momento havia mais de 6 dias entre dois registros. No entanto, você nunca vai imprimir uma linha horizontal, desde que as datas são mais próximos. Então, se você nunca tinha Seg / Qua / Qui no banco de dados, você nunca obter uma HR, porque o datediff seria dois ou três dias, nunca mais sete.
Existem várias abordagens para lidar com isso. Se você esclarecer sua finalidade, que pode ser capaz de ajudá-lo melhor. Por exemplo, o que define uma nova semana? Sáb / Dom à meia-noite? Desde a primeira data na consulta? O que você está tentando mostrar?
Confira o Dia da função Week
Confira a função Semana : A partir de um objeto data / hora, determina a semana número dentro de um ano.