PRIMEIRO DIA DA SEMANA
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.
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.
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
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
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.
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
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
Coloque o código abaixo dentro de um botão e verifique se é isso que esta querendo
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
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
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.
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.
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
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
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.
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[Ô])
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[Ô])
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.
Mais uma vez muito obrigado pelo empenho e vamos continuar tentando até consegui.
Após pensar um pouco consegui recuperar a Semana conforme você necessita segue abaixo a função
Espero ter ajudado
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
Tópico encerrado , respostas não são mais permitidas