2013-03-15 19 views
7

Próbuję utworzyć kod VB, który pozwoli uzyskać początek i koniec poprzedniego miesiąca. Im stanie bieżącego miesiąca, który jest po prostu:Jak uzyskać początek i koniec poprzedniego miesiąca w VB

Month(DateValue(Now)) 

który zwróciłby 3. Stamtąd mogę zabrać od 1 do 2 mi dać sens lutym. To dobrze, ale co z tym, kiedy jestem w styczniu i powtarzam to i daje mi zero - mój kod się nie powiedzie. Czy ktoś wie, jak uzyskać poprzedni miesiąc i dzień rozpoczęcia i zakończenia?

Dzięki

Odpowiedz

19

Pierwszy dzień poprzedniego miesiąca jest zawsze 1, aby uzyskać ostatniego dnia poprzedniego miesiąca, użyj 0 z 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 

Można uzyskać pierwszy dzień z powyższym tak:

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

Zobacz także: How to caculate last business day of month in VBScript

+0

Witam Remou właśnie sprawdzałem twój kod i mam kolejne pytanie - dlaczego to robię: LastDay = DateSerial (rok (data), miesiąc (data) - 1, 1 - 1) dostaję 31/01/2013 zamiast 28.02.2013? Z pewnością Miesiąc (Data) - 1 zwraca 2 oznacza Luty – Katana24

+0

Masz miesiąc -2, raz na miesiąc (data) -1, raz na 0 na dzień. Dzień zerowy tego miesiąca jest ostatnim dniem poprzedniego miesiąca, więc luty to dateserial (2013,3,0), a nie jak pokazuje. – Fionnuala

+0

ohh ok - to jest oszukanie. Dzięki – Katana24

0

Spróbuj uzyskać miesięcy w postaci liczby:

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

To daje 12 w grudniu.

W twoim przypadku użyjesz Month(DateAdd("m", -1, Now)), by po prostu przesłonić miesiąc.

+0

Jak to się dzieje zarówno od początku, jak i od końca dnia poprzedniego miesiąca? – 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)) 

jest to kolejny sposób, aby to zrobić, ale t Wersja Reminka wygląda bardziej czysto.

4

mam podobny wzór na pierwszy i ostatni dzień

pierwszego dnia miesiąca

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

zerowy dzień następnego miesiąca jest ostatni dzień miesiąca

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

Czy to będzie działać w przypadku dat w grudniu? – BGilman

0

Wystarczy dodać coś do tego, co @Fionnuala Said, Poniższe funkcje mogą być używane. Działają nawet w latach przestępnych.

'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 
Powiązane problemy