PRIMEIRO DIA DA SEMANA

JADSON 03/01/2013 01:16:07
#416652
Boa noite, estou precisando de uma função para capturar a data referente ao primeiro dia da semana, sendo que a semana preciso que começe na quinta feira, tenho a seguinte função:

Public Function Dia_da_Semana(ByVal Semana As Integer, Ano As Integer) As Date

Dim wSemana As Integer = Semana
Dim wDias As Integer = (wSemana - 1) * 7
[ô]Dim wDias As Integer = (wSemana) * 7
Dim wdianasemana As Date

wdianasemana = DateAdd(DateInterval.Day, wDias - 3, CDate([Ô]01/01/[Ô] & Ano))

Dia_da_Semana = wdianasemana


Return Dia_da_Semana


End Function

Funcionou até a virada do ano, porém não funciona mais.

Alguma idéia.
JLSMA 03/01/2013 01:22:16
#416654
não sei se ajuda estou fazendo desta forma

Diasemana = DatePart([Ô]w[Ô], Date)

If Diasemana = 1 Then
InicioDestaSemana = Date - 0
InicioProximaSemana = Date + 7
ElseIf Diasemana = 2 Then
InicioDestaSemana = Date - 1
InicioProximaSemana = Date + 6
ElseIf Diasemana = 3 Then
InicioDestaSemana = Date - 2
InicioProximaSemana = Date + 5
ElseIf Diasemana = 4 Then
InicioDestaSemana = Date - 3
InicioProximaSemana = Date + 4
ElseIf Diasemana = 5 Then
InicioDestaSemana = Date - 4
InicioProximaSemana = Date + 3
ElseIf Diasemana = 6 Then
InicioDestaSemana = Date - 5
InicioProximaSemana = Date + 2
ElseIf Diasemana = 7 Then
InicioDestaSemana = Date - 6
InicioProximaSemana = Date + 1
End If

no seu caso diasemana = 5 INICIO
JADSON 03/01/2013 01:36:01
#416655
Obrigado pela resposta, porém na sua rotina preciso informar uma data, na realidade eu informo a semana e o sistema pega a quinta-feira da semana informada como primeiro dia.
ALEVALE 03/01/2013 08:22:48
#416658
Tenta assim:

DateAdd([Ô]D[Ô], -1.0 * DatePart([Ô]D[Ô], Today) + 1, Today)

ou

Dim CalcDate As DateTime
CalcDate = Today.AddDays(-1.0 * Today.Day + 1)

ou

Private Function GetFirstDayOfMonth(ByVal dtDate As DateTime) As DateTime
Dim dtFrom As DateTime = dtDate
dtFrom = dtFrom.AddDays(-(dtFrom.Day - 1))
Return dtFrom
End Function

Private Function GetLastDayOfMonth(ByVal dtDate As DateTime) As DateTime
Dim dtTo As New DateTime(dtDate.Year, dtDate.Month, 1)
dtTo = dtTo.AddMonths(1)
dtTo = dtTo.AddDays(-(dtTo.Day))
Return dtTo
End Function

[ô]if you put code like:
GetFirstDayOfMonth([Ô]2010-05-05[Ô]) [ô] It will return = 2010-05-01
GetLastDayOfMonth([Ô]2010-05-05[Ô]) [ô] It will return = 2010-05-31
FILMAN 03/01/2013 21:31:15
#416711
Resposta escolhida
Coloque o código abaixo dentro de um botão e verifique se é isso que esta querendo

        Dim diaSemana As Integer = Date.Now.DayOfWeek
Dim data As String

If diaSemana > 4 Then
data = DateAdd(DateInterval.Day, -(diaSemana - Date.Now.DayOfWeek), Date.Now).ToString([Ô]dd/MM/yyyy[Ô])
ElseIf diaSemana < 4 Then
data = DateAdd(DateInterval.Day, (4 - diaSemana), DateAdd(DateInterval.Day, -7, CDate([Ô]02/01/2013[Ô]))).ToString([Ô]dd/MM/yyyy[Ô])
Else
data = Date.Now.ToString([Ô]dd/MM/yyyy[Ô])
End If

MsgBox(data)


Lembrando que na clausula (ElseIf diaSemana < 4 Then) tem a expressão CDate([Ô]02/01/2013[Ô]) que eu utilizei para testar os dias anteriores a quinta feira
nesse caso sempre será Date.Now

A variavel diaSemana esta recebendo o dia correspondente a data atual ou seja 0 até 6 começando no domingo e terminando no sabado

Qualquer coisa poste ai
PEGUDO 04/01/2013 08:28:04
#416720
Cara, não testei o código do amigo FILMAN, mas segue uma Classe que eu fiz que retorna o dia da Quinta-Feira da semana que você escolheu:



Como você pode ter reparado, a propriedade necessita de uma data (do tipo DateTime) para que possa funcionar.
Eu estou utilizando, no exemplo, um dateTimePicker mas você pode usar o controle que quiser ou até escrever a data na mão
O importante é que seja do tipo DateTime.
Assim, qualquer que seja a data passado por parâmetro, sempre retornará a data da Quinta-Feira pertencente à semana da data do parâmetro.

Abraços.
ALEVALE 04/01/2013 09:56:26
#416724
Bom desculpa não me atendei a [Ô]quinta-feira[Ô].
Tenta dessa forma.

[ô]FORM
fncDescobreDia([Ô]04/01/2013[Ô])

[ô]FUNÇÃO
Private Function fncDescobreDia(ByVal data As String)
For mth As Integer = 1 To 12
Dim dt As New DateTime(2013, mth, 1)
Do While dt.DayOfWeek <> DayOfWeek.Thursday
dt = dt.AddDays(1)
Loop
MsgBox(dt.ToLongDateString())
Next mth

End Function
JADSON 05/01/2013 00:24:44
#416783
Pessoal obrigado pelas respostas, porém o que estou querendo na realidade é saber a data da quinta feira referente a semana informada pelo o usuário. Ex: O Usuário informa a semana 4 e o sistema pega semana como sendo de 24-01-2013 até 30-01-2013. Como falei a função acima funcionou no ano passado, porém este ano não funciona, se alterar a linha wdianasemana = DateAdd(DateInterval.Day, wDias - 3, CDate([Ô]01/01/[Ô] & Ano)) para wdianasemana = DateAdd(DateInterval.Day, wDias - 5, CDate([Ô]01/01/[Ô] & Ano)) este ano funcionaria, porém ano que vem não.
ALEVALE 05/01/2013 15:08:02
#416796
Jadson o meu código ai funcionaria tranquilamenta basta pensarmos um pouquinho.
Vamos lá..

O código retorna a primeira quinta-feira passando como parametro a data correto?
Vamos lá se hoje é dia (05/01/2013), a primeira quinta é dia 03/01/2013 correto.

Então a proxima quinta é igual a primeira quinta feira dia 03/01 + 7 correto.

Teste assim:

Private Function fncDescobreDia(ByVal data As String)
[ô] For mth As Integer = 1 To 12
Dim dt As New DateTime(2013, 1, 1)
Do While dt.DayOfWeek <> DayOfWeek.Thursday
dt = dt.AddDays(1)
Loop
dt = dt.AddDays(7)
MsgBox(dt.ToLongDateString())
[ô]Next mth
End Function

Lembre-se de alterar a função para pegar o mes correto, na minha função está pegando como o mes 1 (2013,1,1)

UTILIZAÇÃO:
fncDescobreDia([Ô]05/01/2013[Ô])
JADSON 05/01/2013 15:14:24
#416797
Entendi sua função, porém estou precisando é que o parametro seja o número da [Ô]semana[Ô] e não uma [Ô]data[Ô]. Na sua função descubro a quinta-feira porém se eu informar uma data.

Mais uma vez muito obrigado pelo empenho e vamos continuar tentando até consegui.
FILMAN 05/01/2013 20:38:21
#416808
Após pensar um pouco consegui recuperar a Semana conforme você necessita segue abaixo a função

Public Function Dia_da_Semana(ByVal Semana As Integer, Ano As Integer) As Date

Dim wdianasemana As Date

[ô]Captura o dia da primeira quinta feira no ano
Dim pDiaSemanaAno As Date
If Date.Parse([Ô]01/01/[Ô] & Ano).DayOfWeek > 4 Then
pDiaSemanaAno = DateAdd(DateInterval.Day, -(Date.Parse([Ô]01/01/[Ô] & Ano).DayOfWeek - 4), Date.Parse([Ô]01/01/[Ô] & Ano))
ElseIf Date.Parse([Ô]01/01/[Ô] & Ano).DayOfWeek < 4 Then
pDiaSemanaAno = DateAdd(DateInterval.Day, (4 - Date.Parse([Ô]01/01/[Ô] & Ano).DayOfWeek), Date.Parse([Ô]01/01/[Ô] & Ano))
Else
pDiaSemanaAno = Date.Parse([Ô]01/01/[Ô] & Ano)
End If

[ô]Captura a data da semana informada de acordo com o ano
If Semana > 1 Then
Dim difSemana As Integer = (Semana - 1) * 7
wdianasemana = DateAdd(DateInterval.Day, difSemana, pDiaSemanaAno)
Else
wdianasemana = pDiaSemanaAno
End If

Return wdianasemana
End Function



Espero ter ajudado
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas