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 )