2013-03-15 213 views
7

我試圖創建一些VB代碼來獲取上個月的開始和結束。 林能當月這僅僅是:如何在VB中獲取上個月的開始和結束

Month(DateValue(Now)) 

這將返回3.從那裏我可以帶走1給我2月份的含義。這很好,但是當我在一月份進行重複操作時,如何讓它變爲零 - 我的代碼將會失敗。任何人都知道如何獲得前幾個月的開始和結束日呢?

感謝

回答

19

前一個月的第一天總是1,獲得前一個月的最後一天,與DateSerial使用0:

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

您可以從上面得到的第一天,像這樣:

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

參見:How to caculate last business day of month in VBScript

+0

你好Remou只是再次檢查你的代碼,並有另一個問題 - 爲什麼當我這樣做:LastDay = DateSerial(年(日期),月(日期) - 1,1 - 1)我得到31/01/2013年而不是28/02/2013?當然,本月(日期) - 1返回2暗示2月 – Katana24 2013-03-20 16:16:07

+0

你有月-2,一個月(日期)-1,一天0。本月的第0天是上個月的最後一天,所以2月是dateserial(2013,3,0),而不是你所顯示的。 – Fionnuala 2013-03-20 16:21:42

+0

噢好吧 - 這就是decieving。謝謝 – Katana24 2013-03-20 16:24:26

0

試試這個得到月份數形式:

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

它會給你12十二月。

所以在你的情況下,你會使用Month(DateAdd("m", -1, Now))只需一個月。

+0

這是如何得到上個月的開始和結束_day_? – user66001 2017-09-04 21:56:53

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

這是另一種方式來做到這一點,但餘噸hink Remou的版本看起來更乾淨。

4

我有相似的配方和最後一天

在第一個月的日

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

下個月的零日是本月的最後一天

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

這項工作將在12月份進行嗎? – BGilman 2018-02-22 21:06:58

0

只需要添加一些什麼@Fionnuala說,下面的函數可以使用。這些甚至適用於閏年。

'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 
相關問題