代码之家  ›  专栏  ›  技术社区  ›  Saif Khan

计算时间跨度和未来日期的日期差

  •  0
  • Saif Khan  · 技术社区  · 14 年前

    我试图根据日期列按以下顺序标记网格中的行

    • 从今天起两天或两天以上 然后是红色
    • 当一天大的时候就黄了
    • 当0天大时变绿
    • 当日期在未来的时候 蓝色

    我有以下几项工作很好,除了未来的日期是绿色而不是蓝色。

     Dim myDate As DateTime = CType(grdSummaryView.GetRowCellValue(e.RowHandle, "myDate"), DateTime)
    
     Select Case Now.Subtract(myDate).Days
                    '2 or more days old then RED FLAG
                    Case Is >= 2
                        e.Value = ImageCollection2.Images(3)
                    Case 1
                    '1 day old then YELLOW FLAG
                        e.Value = ImageCollection2.Images(1)
                    Case 0
                    'Current day then GREEN FLAG
                        e.Value = ImageCollection2.Images(0)
                    Case Else
                        e.Value = ImageCollection2.Images(4)
     End Select
    
    3 回复  |  直到 11 年前
        1
  •  1
  •   Chris Baxter    14 年前

    我可以建议另一种编写代码的方法:

    Dim age As Double = Now.Substract(myDate).TotalDays
    
    If age >= 2 Then
      e.Value = ImageCollection2.Images(3) //Red
    ElseIf age >= 1 Then
      e.Value = ImageCollection2.Images(1) //Yellow
    ElseIf age >= 0 Then
      e.Value = ImageCollection2.Images(0) //Green
    Else
      e.Value = ImageCollection2.Images(4) //Blue
    End If
    

    正如我在最初的评论中提到的,除非您在未来至少24小时内,否则天数将返回0。因此,如果是2010/08/15 12:30:00,而您的未来日期是2010/08/16 0:30:00,那么时间跨度是-00:12:00:00等,天数将是0。

        2
  •  2
  •   Geoffrey    14 年前

    .Days总是给出一个整数值,因此在您至少24小时以后才会起作用。你可以按照自己的建议解决问题,也可以根据时间跨度的不同立即解决问题。

    您可能还需要考虑这种差异的含义。2天前是指您希望选择48小时前创建的元素,还是指11月10日创建的所有条目。

        3
  •  1
  •   Saif Khan    14 年前

    我找到了解决办法。

    我首先用一个IF-using日期来包装我的案例。与第一个检查日期是否在将来进行比较。

    If Date.Compare(myDate, Now) < 0 Then
                    Select Case Now.Subtract(delivDate).Days
    
                        Case Is >= 2
                            '2 or more days old then RED FLAG
                            e.Value = ImageCollection2.Images(3)
                        Case 1
                            '1 day old then YELLOW FLAG
                            e.Value = ImageCollection2.Images(1)
                        Case Else
                            '0 day (current day) then GREEN FLAG
                            e.Value = ImageCollection2.Images(0)
                    End Select
                Else
                    'DATE IS IN THE FUTURE
                    e.Value = ImageCollection2.Images(4)
                End If