【问题标题】:Day and month comparison without inluding year in vb.net日月比较,不包括 vb.net 中的年份
【发布时间】:2016-01-05 10:23:21
【问题描述】:

给出以下信息

orderdate=05/01/2016
startday=24
startmonth=08
endday=2
endmonth=10

基本上我们必须比较销售期间的订单日期,即24 august10 october

24 august10 october 期间之外的日期将是非销售期。

因此,对于任何给定的订单日期,我们必须计算它是在销售期还是​​非销售期。问题是我们没有提供年份只有开始日期、开始月份、结束日期和结束月份。

还可以说如果我们使用日期时间,那么start date=24/08/2016enddate=2/10/2016。它需要当前年份,但通常是错误的。

它应该需要startdate=24/08/2015(因为非销售期将从 2015 年 10 月 3 日开始到 2016 年 8 月 23 日,之后销售期将开始,enddate=2/10/2016(我们正在纠正)。

请告诉我是否有可能只比较没有年份的月份和日期,以便将 orderdate 与给定的开始日期、开始月份、结束日期和结束月份进行比较。

【问题讨论】:

  • DateTime 类有你想要的一切,还有一些很好的命名。看看它的MonthDay.. 以及它拥有的一切!
  • 如果开始日期和结束日期都显示 OneDay,如何显示开始日期 24/08/2016 到 8 月 24 日

标签: .net vb.net datetime comparison


【解决方案1】:

我认为您需要的是以下内容。它根据提供的月份和日期创建日期,然后对其进行调整以找到按时间顺序正确的历史日期:

    Private Function IsOrderInSalesPeriod(orderDate As Date, startMonth As Integer, startDay As Integer, endMonth As Integer, endDay As Integer) As Boolean

    Dim salesStartDate As New Date(DateTime.Now.Year, startMonth, startDay)
    Dim salesEndDate As New Date(DateTime.Now.Year, endMonth, endDay)
    'if the sales period is in the future it must be a year ahead
    If salesStartDate > DateTime.Now Then salesStartDate = salesStartDate.AddYears(-1)
    If salesEndDate > DateTime.Now Then salesEndDate = salesEndDate.AddYears(-1)
    'check that the start is before the end
    If salesStartDate > salesEndDate Then salesStartDate = salesStartDate.AddYears(-1)

    If orderDate >= salesStartDate AndAlso orderDate <= salesEndDate Then
        Return True
    Else
        Return False
    End If
End Function

【讨论】:

  • 感谢您提供解决方案,但在这种情况下,我只有一个月和一天。根据您给定的代码行 Dim salesStartDate As New Date(orderDate.Year, 8, 24) 它将把当前年份 2016 作为 2016 年 8 月 24 日。例如 OrderDate = 2016 年 1 月 5 日。现在我必须检查它是否正在下降11 月 1 日至 12 月 24 日(即销售期)或 12 月 25 日至 10 月 31 日(非销售期)。
  • 也使用日期时间将追加当前年份。我们有 2015 年 12 月 25 日至 2016 年 10 月 31 日的情况(这里的开始日期与非销售期的结束日期有不同的年份)。这取决于我们在哪一年计算,想要一个通用的解决方案,以便它适用于所有场景。对于销售期它可以工作,但对于非销售期(从 12 月 25 日到明年 10 月 31 日)它不会工作。跨度>
  • 订单日期 1/01/2016,非销售期条件(开始日期 = 25,开始月 = 12,结束日期 = 31,结束月 = 10)。现在,如果我们要检查当前的非销售期场景应该是 25/12/2015 到 31/10/2016。但是使用日期时间它将给出 Startdate= 25/12/2016 ,Enddate= 31/12/2016。开始日期如何在结束日期之后。跨度>
  • 好的,我想我现在明白你的意思了。我已经编辑了我的答案
  • 目前我有两种情况。当销售期间在不同的年份。例如 Startdate=25, Startmonth=12,Enddate=2, Endmonth=2).And OrderDate=1/1/2016(意味着我的销售期是从 2015 年 11 月 1 日到 2016 年 2 月 2 日)
【解决方案2】:

这可能有效,但您的问题不是很清楚。

Private Function InSalesPeriod(OrderDate As DateTime) As Boolean
    Dim salesStrt As New DateTime(OrderDate.Year, 8, 24)
    Dim salesEnd As New DateTime(OrderDate.Year, 10, 10)

    If OrderDate >= salesStrt AndAlso OrderDate <= salesEnd Then
        Return True
    Else
        Return False
    End If
End Function

这会检查订单日期是否在订单年份指定的日期之间。

【讨论】:

  • 这就是我开始的,但(显然)订单日期可能在销售期之后,所以它可能在上一年!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
相关资源
最近更新 更多