Foxtable(狐表)用户栏目专家坐堂 → 两个日期间天数的计算


  共有2677人关注过本帖树形打印复制链接

主题:两个日期间天数的计算

美女呀,离线,留言给我吧!
xiaohuli
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:3442 威望:0 精华:0 注册:2014/2/8 11:13:00
两个日期间天数的计算  发帖心情 Post By:2015/7/31 0:17:00 [只看该作者]

在绘制甘特图的时候,我写了如下代码,但代码总是有错误。周期列是表中没有的,我想通过查询表中的开始日期和结束日期来计算出周期,但是计算周期的时候不对,请老师们帮忙看看。

If DrawGannt Then
    Dim r As Row  = Tables("任务_Table1").Rows(e.Row.Index)
    Dim dt1 As Date = r("开始日期")
    Dim dt2 As Date = r("结束日期")
    Dim dt As Date = e.Col.Name.Replace("年","-").Replace("月_","-")
    If dt>=dt1 AndAlso dt<=dt2 Then
        e.StartDraw()
        If dt < Date.Today Then
            e.Graphics.FillRectangle(Brushes.Green,e.x ,e.y + 5, e.Width, e.Height - 10)
        Else
            e.Graphics.FillRectangle(Brushes.Red,e.x ,e.y + 3, e.Width, e.Height - 7)
        End If
        If r.IsNull("计划任务") = False Then
            Dim tp As TimeSpan
            Dim dr As Date
            tp = (dr("开始日期") - dr("结束日期")).TotalDays()
         
            Dim day As Double = tp / r("计划任务") * r("累计完成")
            If dt <= dt1.AddHours(24 * day) Then
                Dim d As Integer = math.Floor(day)
                If (dt-dt1).Days < d Then '满格
                    e.Graphics.FillRectangle(Brushes.Yellow,e.x ,e.y + 8, e.Width, e.Height - 16)
                Else
                    Dim width As Integer = (day - d) * e.width
                    e.Graphics.FillRectangle(Brushes.Yellow,e.x ,e.y + 8, width, e.Height - 16)
                End If
            End If
        End If
        e.EndDraw()
    End If
End If
'
'
'
'


 回到顶部
美女呀,离线,留言给我吧!
xiaohuli
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:3442 威望:0 精华:0 注册:2014/2/8 11:13:00
  发帖心情 Post By:2015/7/31 9:35:00 [只看该作者]

老师们,帮我看看我的问题。


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/31 9:53:00 [只看该作者]

上传具体例子,代码看不出问题。

 回到顶部
美女呀,离线,留言给我吧!
xiaohuli
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:3442 威望:0 精华:0 注册:2014/2/8 11:13:00
  发帖心情 Post By:2015/7/31 10:00:00 [只看该作者]

老师,代码是有问题的,保存的时候出现错误。


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/31 10:26:00 [只看该作者]

 从另一个表查找?

 

 参考 http://www.foxtable.com/help/topics/0396.htm

 


 回到顶部
美女呀,离线,留言给我吧!
xiaohuli
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:3442 威望:0 精华:0 注册:2014/2/8 11:13:00
  发帖心情 Post By:2015/7/31 10:36:00 [只看该作者]

老师,我的查询表中是没有周期的,我想通过结束日期-开始日期来计算出周期,然后按照周期去计算。


 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2015/7/31 10:40:00 [只看该作者]

有时候日期计算时会出错
http://www.foxtable.com/help/index.html?n=1517.htm

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/31 10:58:00 [只看该作者]

那直接写

 

tp = dt2 - dt1

Dim day As Double = tp.TotalDays / r("计划任务") * r("累计完成")


 回到顶部
帅哥哟,离线,有人找我吗?
狐表开发
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1168 威望:0 精华:0 注册:2015/6/8 21:38:00
  发帖心情 Post By:2015/7/31 11:30:00 [只看该作者]

If DrawGannt Then
    Dim r As Row  = Tables("任务_Table1").Rows(e.Row.Index)
    Dim dt1 As Date = r("开始日期")
    Dim dt2 As Date = r("结束日期")
    Dim dt As Date = e.Col.Name.Replace("年","-").Replace("月_","-")
    If dt>=dt1 AndAlso dt<=dt2 Then
        e.StartDraw()
        If dt < Date.Today Then
            e.Graphics.FillRectangle(Brushes.Green,e.x ,e.y + 5, e.Width, e.Height - 10)
        Else
            e.Graphics.FillRectangle(Brushes.Red,e.x ,e.y + 3, e.Width, e.Height - 7)
        End If
        If r.IsNull("计划任务") = False Then
            Dim tp As TimeSpan
            Dim dr As Date
            tp = dr("开始日期") - dr("结束日期")        
            Dim day As Double = tp.TotalDays() / r("计划任务") * r("累计完成")
            If dt <= dt1.AddHours(24 * day) Then
                Dim d As Integer = math.Floor(day)
                If (dt-dt1).Days < d Then '满格
                    e.Graphics.FillRectangle(Brushes.Yellow,e.x ,e.y + 8, e.Width, e.Height - 16)
                Else
                    Dim width As Integer = (day - d) * e.width
                    e.Graphics.FillRectangle(Brushes.Yellow,e.x ,e.y + 8, width, e.Height - 16)
                End If
            End If
        End If
        e.EndDraw()
    End If
End If


 回到顶部