Semana do ano

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

jcmenegaco
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 18 Ago 2005 11:33

Semana do ano

Mensagem por jcmenegaco »

Alguem pode me dizer se existe alguma função do clipper para dar o numero da semana do ano.
Agradeço muito :xau
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem por Grings »

No site do Toya tem uma função que faz isso. Dê oma olhada na seção de links aquí do fórum qu tem o endereço.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Isso já foi respondido aqui no forum.
Dê um pesquisada.
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem por Grings »

GVC,
Isso é a legítima resposta que não serviu para nada além de fazer tempo quem perguntou e quem respondeu, e também, lotar o fórum. Peço-lhe que se não for para ajudar, não atrapalhe.

Aquí está a rotina:

Compile com /N /M

///////////////////////////////////////////////////////////////////////////////
// Saber as semanas do ano
// toya - 23/10/2004 08:04
// toyasis@yahoo.com.br
// http://www.toyanet.com.br
///////////////////////////////////////////////////////////////////////////////

function main()

local aSemanas:={}, acSemanas:={}
local c1
local d1, d2
local x, y, z

__SetCentury( 'on' )
Set( 4, if(__SetCentury(), 'dd/mm/yyyy', 'dd/mm/yy') )

Clear
// saber qual dia da semana é o primeiro dia do ano
d1:=ctod('01/01/'+str( year( date() ), 4, 0 ) )
c1:=dow( d1 )

// posicionar no final da semana 1
y=7-c1

// numero de semanas no ano
d2:=ctod('31/12/'+str( year( date() ), 4, 0 ) )
z:=semana( d2 )

// primeira semana
aadd( aSemanas, { d1, d1+y } )
d1+=( y+1 )

// demais semanas
for x=2 to z
aadd( aSemanas, { d1, min( d1+6, d2 ) } )
d1+=7
next

// só para mostrar no achoice()
for x=1 to len( aSemanas )
aadd( acSemanas, strzero( x, 2, 0 )+'. '+dtoc( aSemanas[x,1] )+' '+dtoc( aSemanas[x,2] ) )
next
clear
@ 00,27 say padc( 'Semanas do ano: '+str( year( date() ), 4, 0 ), 32 )
@ 01,27 say ' Semana Inicio Fim'
dispbox( 02, 27, 24, 58, 1 )
x:=achoice( 03,29,23,56,acSemanas )

return nil

function Semana( dData )

local dDataAux
local nSemanas, nRestoDias, nDias1Sem, nDias

if dData = NIL
dData := date()
endif
if valtype( dData ) != 'D'
return -1
endif
dDataAux:= ctod( '01/01/'+alltrim( str( year( dData ) ) ) )
nDias:=dData-dDataAux + 1
nSemanas:= int( nDias / 7 )
nRestoDias:=nDias % 7
nDias1Sem:=8-if( dow( dDataAux) - 1 = 0, 7, dow( dDataAux ) - 1 )

return nSemanas + if( nDias1Sem >= nRestoDias, 1, 2 )
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Desculpe-me. Foi a primeira vez que respondi dessa forma.
Eu já havia respondido essa mesma pergunta antes e coloquei a função para o solicitante.
Não acontecerá novamente.
Boa sorte.

Para vc criar sua própria função:

- Determine o primeiro dia do ano;
- Mova o seu ponteiro de dia até o domingo dessa semana. Vale lembrar que não importa se esse dia era no ano anterior;
- Agora vc tem a semana 1;
- Mova esse ponteiro, incrementando a data em 7 dias, até vc ter uma data maior ou igual a que vc quer determinar em que semana cai. Use uma variável para contar quantas semanas passaram, desde a semana 1;
- Retorne para o sistema essa contagem.
* Essa função pode ser alterada para retornar a data de inicio de uma determinada semana. O principio é o mesmo.

Boa sorte novamente.
Responder