Alguem pode me dizer se existe alguma função do clipper para dar o numero da semana do ano.
Agradeço muito :xau
Semana do ano
Moderador: Moderadores
-
jcmenegaco
- Usuário Nível 1

- Mensagens: 3
- Registrado em: 18 Ago 2005 11:33
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 )
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 )
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.
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.

