2013-03-15 8 views
7

Sto cercando di creare un codice VB che otterrà l'inizio e la fine del mese precedente. Im in grado di mese in corso, che è solo:Come arrivare all'inizio e alla fine del mese precedente in VB

Month(DateValue(Now)) 

che sarebbe tornato 3. Da lì posso togliere 1 di darmi 2 significato febbraio. Questo va bene, ma che dire di quando sono in gennaio e lo ripeto e mi dà zero - il mio codice fallirà. Qualcuno sa come ottenere i mesi precedenti inizio e fine giorno, allora?

Grazie

risposta

19

Il primo giorno del mese precedente è sempre 1, per ottenere l'ultimo giorno del mese precedente, utilizzare 0 con 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 

è possibile ottenere il primo giorno da quanto sopra in questo modo:

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

Consulta anche: How to caculate last business day of month in VBScript

+0

Hi Remou stava semplicemente rivedendo il tuo codice e ha un'altra domanda: perché è così che quando faccio questo: LastDay = DateSerial (Year (Date), Month (Date) - 1, 1 - 1) ottengo 31/01/2013 anziché il 28/02/2013? Sicuramente il mese (Data) - 1 restituisce 2 che implica febbraio – Katana24

+0

Hai mese -2, una volta per mese (data) -1, una volta per 0 per giorno. Il giorno zeroth di questo mese è l'ultimo giorno del mese precedente, quindi febbraio è datario (2013,3,0), non come lo mostri. – Fionnuala

+0

ohh ok - questo è il decieving. Grazie – Katana24

0

Prova questo per ottenere il mese in forma di numero:

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

Vi darà 12 per dicembre.

Quindi nel tuo caso dovresti usare Month(DateAdd("m", -1, Now)) solo per un mese.

+0

Come si ottiene l'inizio e la fine del giorno precedente del mese precedente? – 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)) 

Questo è un altro modo per farlo, ma io t La versione di Remou sembra più pulita.

4

devo formula simile per il primo e ultimo giorno

Il primo giorno del mese

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

Lo zero Giorno del mese successivo è l'ultimo giorno del mese

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

Funzionerà per le date di dicembre? – BGilman

0

Solo per aggiungere qualcosa a ciò che @Fionnuala ha detto, Le seguenti funzioni possono essere utilizzate. Funzionano anche per gli anni bisestili.

'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