Quantcast
Viewing latest article 3
Browse Latest Browse All 3

Como recuperar datas para dias específicos da semana para todos os meses do ano?

Embora não haja função específica ColdFusion  para esse retorno, é possível construir tal funcionalidade utilizando várias funções de data do ColdFusion. Aqui está uma UDF (função definida pelo usuário), bem como um exemplo:

<cfscript>
     function getEveryDOW(dowlist) {
          var year = year(now());
          var day1 = "";
          var x = "";
          var thisDOW = "";
          var result = arrayNew(1);
          var initialDOW = "";
          var offset = "";
          if(arrayLen(arguments) gte 2) year = arguments[2];
          day1 = createDate(year, 1,1);
          initialDOW = dayOfWeek(day1);
          while(year(day1) is year) {
               for(x=1; x lte listlen(dowlist); x=x+1) {
                    thisDOW = listGetAt(dowlist, x);
                    offset = thisDOW - initialDOW;
                    dayToAdd = dateAdd("d", offset, day1 );
                    arrayAppend(result, dayToAdd);
               }
               day1 = dateAdd("ww", 1, day1);
          }
          return result;
     }
</cfscript>

Exemplo:

<cfset dowList = "1,3">
<cfset dArr = getEveryDow(dowlist)>
<cfdump var="#dArr#">

A UDF é um pouco complicada, então deixe-me explicar. A teoria básica por trás dela é começar com um objeto data correspondente ao início do ano. Descobrir que dia da semana que é. Então nós fazemos um loop até o final do ano. Fazemos isso usando dateAdd que nos permite saltar semana a semana. Desde que soubemos qual o dia inicial da semana, podemos achar o dia da semana desejado descobrindo um deslocamento.

by Ray Camden

Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.


Viewing latest article 3
Browse Latest Browse All 3