web-dev-qa-db-fra.com

Comment obtenir le début et la fin du mois précédent en VB

J'essaie de créer du code VB qui obtiendra le début et la fin du mois précédent

Month(DateValue(Now))

qui reviendrait 3. De là, je peux enlever 1 pour me donner 2 signifiant février. C'est bien, mais qu'en est-il quand je suis en janvier et que je le répète et que cela me donne zéro - mon code va échouer Quelqu'un sait comment obtenir le début et la fin des mois précédents alors? 

Merci

9
Katana24

Le premier jour du mois précédent est toujours égal à 1; pour obtenir le dernier jour du mois précédent, utilisez 0 avec DateSerial:

''Today is 20/03/2013 in dd/mm/yyyy
DateSerial(Year(Date),Month(Date),0) = 28/02/2013 
DateSerial(Year(Date),1,0) = 31/12/2012 

Vous pouvez obtenir le premier jour de ce qui précède comme ceci:

LastDay = DateSerial(Year(Date),Month(Date),0)
FirstDay = LastDay-Day(LastDay)+1

Voir aussi: Comment calculer le dernier jour ouvrable du mois dans VBScript

26
Fionnuala

J'ai une formule similaire pour le premier et le dernier jour

Le premier jour du mois

FirstDay = DateSerial(Year(Date),Month(Date),1)

Le jour zéro du mois suivant est le dernier jour du mois

LastDay = DateSerial(Year(Date),Month(Date)+ 1,0) 
5
Quang le ba
firstDay = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1)
lastDay = DateAdd("d", -1, DateSerial(Year(Now), Month(Now), 1))

C'est une autre façon de le faire, mais je pense que la version de Remou a l'air plus nette.

1
MrBlue

Cela fonctionne de manière fiable pour moi dans mon sous-marin principal.

Dim defDate1 As Date, defDate2 As Date

'** Set default date range to previous month
defDate1 = CDate(Month(Now) & "/1/" & Year(Now))
defDate1 = DateAdd("m", -1, defDate1)
defDate2 = DateAdd("d", -1, DateAdd("m", 1, defDate1))
1
Blisteragent

Essayez ceci pour obtenir le mois sous forme numérique:

Month(DateAdd("m", -3, Now))

Cela vous donnera 12 pour décembre.

Donc, dans votre cas, vous utiliseriez Month(DateAdd("m", -1, Now)) pour simplement sous-extraire un mois.

0
Olle Sjögren
Public Shared Function GetFOMPrev(ByVal tdate As Date) As Date
    Return tdate.AddDays(-(tdate.Day - 1))
End Function

Public Shared Function GetEOMPrev(ByVal tdate As Date) As Date
    Return tdate.AddDays(-tdate.Day)
End Function

Usage:

'Get End of Month of Previous Month - Pass today's date
EOM = GetEOMPrev(Date.Today)

'Get First of Month of Previous Month - Pass date just calculated
FOM = GetFOMPrev(EOM)
0
Russell

Juste pour ajouter quelque chose à ce que @Fionnuala a dit, les fonctions ci-dessous peuvent être utilisées. Ceux-ci fonctionnent même pendant des années bissextiles.

'If you pass #2016/20/01# you get #2016/31/01#
Public Function GetLastDate(tempDate As Date) As Date
    GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function

'If you pass #2016/20/01# you get 31
Public Function GetLastDay(tempDate As Date) As Integer
    GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function
0
Adarsh Madrecha

Essaye ça

First_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddMonths(-1)

Last_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddDays(-1)
0
Johannes denToom