我正在MS SQL Server Reporting Services中创建报告,需要将默认的“开始日期”和“结束日期”报告参数设置为上一个日历月的第一个和最后一个日期,并需要帮助。
该报告是在该月的第二个日历日生成的,我需要以下值:
上个月历月 - 第一天
- 最后一天
我一直在使用DateAdd,但是没有成功创建一个Expression(在我理解的VB.NET中)。我非常感谢你能给我的任何帮助!
答案 0 :(得分:63)
Randall,这里是我发现在SSRS中工作的VB表达式,用于获取任意月份的第一天和最后一天,使用当前月份作为参考:
上个月的第一天:
=dateadd("m",-1,dateserial(year(Today),month(Today),1))
本月第一天:
=dateadd("m",0,dateserial(year(Today),month(Today),1))
下个月的第一天:
=dateadd("m",1,dateserial(year(Today),month(Today),1))
上个月的最后一天:
=dateadd("m",0,dateserial(year(Today),month(Today),0))
本月最后一天:
=dateadd("m",1,dateserial(year(Today),month(Today),0))
下个月的最后一天:
=dateadd("m",2,dateserial(year(Today),month(Today),0))
MSDN documentation for the VisualBasic DateSerial(year,month,day)
function说明该函数接受year
,month
和day
参数的预期范围之外的值。这允许您指定有用的日期相对值。例如,Day
的值为0表示“前一个月的最后一天”。这是有道理的:那就是当月第1天的前一天。
答案 1 :(得分:32)
这些功能对我非常有帮助 - 特别是在设置订阅报告时;但是,我注意到在使用上面公布的当月最后一天功能时,只要正在进行的月份与当前月份具有相同的天数,它就会起作用。我已经完成并测试了这些修改,希望它们能在未来帮助其他开发人员:
日期公式: 找到上个月的第一天:
DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))
查找上个月的最后一天:
DateSerial(Year(Today()), Month(Today()), 0)
查找本月的第一天:
DateSerial(Year(Today()),Month(Today()),1)
查找当月的最后一天:
DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)
答案 2 :(得分:16)
Dim thisMonth As New DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)
Dim firstDayLastMonth As DateTime
Dim lastDayLastMonth As DateTime
firstDayLastMonth = thisMonth.AddMonths(-1)
lastDayLastMonth = thisMonth.AddDays(-1)
答案 3 :(得分:4)
我不熟悉SSRS,但您可以使用DateTime
构造函数在VB.Net中获取上个月的开头和结尾,如下所示:
Dim prevMonth As DateTime = yourDate.AddMonths(-1)
Dim prevMonthStart As New DateTime(prevMonth.Year, prevMonth.Month, 1)
Dim prevMonthEnd As New DateTime(prevMonth.Year, prevMonth.Month, DateTime.DaysInMonth(prevMonth.Year, prevMonth.Month))
(yourDate
可以是任何DateTime
对象,例如DateTime.Today
或#12/23/2003#
)
答案 4 :(得分:3)
:
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)
答案 5 :(得分:3)
我在将实际的VB.NET转换为SSRS使用的Expression子集时遇到了一些困难。你的确激励了我,这就是我想出来的。
StartDate
=dateadd("d",0,dateserial(year(dateadd("d",-1,dateserial(year(Today),month(Today),1))),month(dateadd("d",-1,dateserial(year(Today),month(Today),1))),1))
End Date
=dateadd("d",0,dateserial(year(Today),month(Today),1))
我知道StartDate(上个月的第一天)有点递归。这里有什么我想念的吗?这些是严格的日期字段(即没有时间),但我认为这应该是闰年等等。
我是怎么做的?
答案 6 :(得分:2)
我一直在寻找一个简单的答案来解决这个问题。这是我发现的
这将分开年份和月份,休假一个月并获得第一天。
firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)
从当前
获取上个月的第一天lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)
更多细节可在以下网址找到: http://msdn.microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx
答案 7 :(得分:1)
这个会给你约会时间:
=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)),
DateFormat.ShortDate)
这个会给你日期时间:
=dateadd("m",-1,dateserial(year(Today),month(Today),1))
答案 8 :(得分:0)
Dim aDate As DateTime = #3/1/2008# 'sample date
Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1))
Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1)
'to access just the date portion
' StartDate.Date
' EndDate.Date