2013-03-15 217 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 
相关问题