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>
Foi útil?

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 a função Semana : A partir de um objeto data / hora, determina a semana número dentro de um ano.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top