Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server Reporting Services(VB.Net)中查找上一个日历月的第一天和最后一天_Vb.net_Date_Reporting Services_Calendar - Fatal编程技术网

在SQL Server Reporting Services(VB.Net)中查找上一个日历月的第一天和最后一天

在SQL Server Reporting Services(VB.Net)中查找上一个日历月的第一天和最后一天,vb.net,date,reporting-services,calendar,Vb.net,Date,Reporting Services,Calendar,我正在MS SQL Server Reporting Services中创建报表,需要将默认的开始日期和结束日期报表参数设置为上一个日历月的第一个和最后一个日期,并需要帮助 报告在每月的第2个日历日生成,我需要以下值: 上一个日历月 -第一天 -最后一天 我一直在使用DateAdd,但没有成功地创建表达式(据我所知,在VB.NET中)。我真的很感激你能给我的任何帮助 在C#中: 我不熟悉SSR,但您可以使用DateTime构造函数在VB.Net中获取上个月的开始和结束,如下所示: Dim pre

我正在MS SQL Server Reporting Services中创建报表,需要将默认的开始日期和结束日期报表参数设置为上一个日历月的第一个和最后一个日期,并需要帮助

报告在每月的第2个日历日生成,我需要以下值:

上一个日历月
-第一天
-最后一天

我一直在使用DateAdd,但没有成功地创建表达式(据我所知,在VB.NET中)。我真的很感激你能给我的任何帮助

在C#中:


我不熟悉SSR,但您可以使用
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#

我在将实际的VB.NET转换为SSRS使用的表达式子集时遇到了一些困难。你确实启发了我,这就是我想到的

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(上个月的第一天)来说有点递归。这里有我遗漏的东西吗?这些都是严格意义上的日期字段(即没有时间),但我认为这应该是闰年等


我是怎么做到的?

Randall,以下是我在SSRS中找到的VB表达式,用于获取任何月份的第一天和最后一天,使用当前月份作为参考:

        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
上个月的第一天:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 
=dateadd("m",0,dateserial(year(Today),month(Today),0))
本月第一天:

=dateadd("m",0,dateserial(year(Today),month(Today),1)) 
=dateadd("m",1,dateserial(year(Today),month(Today),0))
下个月的第一天:

=dateadd("m",1,dateserial(year(Today),month(Today),1)) 
=dateadd("m",2,dateserial(year(Today),month(Today),0))
上月最后一天:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 
=dateadd("m",0,dateserial(year(Today),month(Today),0))
本月最后一天:

=dateadd("m",0,dateserial(year(Today),month(Today),1)) 
=dateadd("m",1,dateserial(year(Today),month(Today),0))
下个月最后一天:

=dateadd("m",1,dateserial(year(Today),month(Today),1)) 
=dateadd("m",2,dateserial(year(Today),month(Today),0))

说明该函数接受超出
参数预期范围的值。这允许您指定有用的日期相对值。例如,
Day
的值为0表示“上个月的最后一天”。这是有道理的:那是本月第一天的前一天。

我一直在寻找一个简单的答案来解决这个问题。这是我发现的

这将分年分月,休息一个月,第一天上班

firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)
从当前日期获取上个月的第一天

lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)
有关更多详情,请访问:

这些功能对我很有帮助-尤其是在设置订阅报告方面;但是,我注意到,当使用上面发布的本月最后一天功能时,只要下一个月的天数与本月的天数相同,它就可以工作。我已经完成并测试了这些修改,希望它们能在将来帮助其他开发人员:

日期公式: 查找上个月的第一天:

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(Today()), 0)
DateSerial(Year(Today()),Month(Today()),1)
查找当月的最后一天:

DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)

这一个将为您提供日期和时间:

=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)), 
DateFormat.ShortDate)

这一个将为您提供datetime:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 

您可以将
new
更改为
new
,并将其称为VB.NET+1,用于将“参考日期”存储在变量中,这样就消除了在计算第一天和最后一天之间有一个月轮班的情况(很不可能,但也可能)。我在生产中从未见过这种情况,但正是因为这个原因,我看到了一个中断的计划构建本月最后一天和下个月最后一天不正确;两者都假设未来月份的天数与前一个月相同。请参阅@Stephanie Grice的答案,了解在SSRS表达式中执行此操作的更好方法。