2013-03-15 7 views
7

Ich versuche, etwas VB-Code zu erstellen, der den Anfang und das Ende des vorherigen Monats erhält. Im fähig, auf den aktuellen Monat, die gerade ist:Wie bekomme ich Anfang und Ende des vorherigen Monats in VB

Month(DateValue(Now)) 

die 3. Von dort zurückkehren würde ich kann 1 wegzunehmen, um mir 2 Bedeutung Februar. Das ist in Ordnung, aber was ist, wenn ich im Januar bin und ich wiederhole das und es gibt mir Null - mein Code wird fehlschlagen. Kann jemand den Anfangs- und Endtag der vorherigen Monate dann bekommen?

Dank

Antwort

19

Der erste Tag des Vormonats ist immer 1, den letzten Tag des Vormonats zu erhalten, verwenden Sie 0 mit DatSeriell:

''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 

Sie können wie so den ersten Tag aus dem obigen erhalten:

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

Siehe auch: How to caculate last business day of month in VBScript

+0

Hallo Remou ging gerade wieder über Ihren Code und habe eine andere Frage - warum ist das, wenn ich das tue: LastDay = DateSerial (Jahr (Datum), Monat (Datum) - 1, 1 - 1) ich bekomme 31/01/2013 statt 28.02.2013? Sicherlich der Monat (Datum) - 1 gibt 2 zurück, was Februar – Katana24

+0

bedeutet. Sie haben Monat -2, einmal für Monat (Datum) -1, einmal für 0 für Tag. Der nullte Tag dieses Monats ist der letzte Tag des vorherigen Monats, also ist der Februar (2013,3,0) Datum, nicht wie du es zeigst. – Fionnuala

+0

ohh ok - das ist entschieden. Danke – Katana24

0

die Sie interessieren den Monat in Zahlenform zu erhalten:

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

Es wird Ihnen 12 für Dezember.

Also in Ihrem Fall würden Sie Month(DateAdd("m", -1, Now)) verwenden, um nur einen Monat abzuziehen.

+0

Wie wird das Anfang und Ende _day_ des vorherigen Monats? – user66001

0
firstDay = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1) 
lastDay = DateAdd("d", -1, DateSerial(Year(Now), Month(Now), 1)) 

Dies ist ein weiterer Weg, es zu tun, aber ich t Hink Remous Version sieht sauberer aus.

4

Ich habe ähnliche Formel für den ersten und letzten Tag

Der erste Tag des Monats

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

Der Null Tag des nächsten Monats ist der letzte Tag des Monats

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

Funktioniert das für Termine im Dezember? – BGilman

0

Nur um etwas hinzuzufügen, was @Fionnuala sagte, können die folgenden Funktionen verwendet werden. Diese arbeiten sogar für Schaltjahre.

'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 
Verwandte Themen