Office中国论坛/Access中国论坛

标题: 如何计算某一时段内有几个周六日? [打印本页]

作者: yanwei82123300    时间: 2012-6-25 16:03
标题: 如何计算某一时段内有几个周六日?
如何计算某一时段内有几个周六日?
例如6-25~8-6共有几个周六日?答案是12个
我想如何让系统自动计算,请帮助写个自定义函数,谢谢!!
作者: yanwei82123300    时间: 2012-6-25 16:16
我们公司的销售订单的发货日期:是在承诺交货日期字段上+生产周期(不包括周六日的正常工作日,即5天):
例如:承诺交货日期字段 6-25
      生产周期          30天
      发货日期是        8-6
请大家帮助写个自定义函数吧,谢谢

作者: yanwei82123300    时间: 2012-6-25 16:17
请大家帮助解答一下2楼的问题,一楼的暂缓,谢谢
作者: Henry D. Sy    时间: 2012-6-25 16:23
记得曾经写过一个例子,
作者: Henry D. Sy    时间: 2012-6-25 16:24
周六日=周六+周日
或者
周六日=周六
作者: Henry D. Sy    时间: 2012-6-25 16:41
给你写一个吧
  1. Public Function gNonWorkDay(sDate As Date, eDate As Date)
  2.     Dim i As Integer, j As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     j = DateDiff("d", sDate, eDate)
  5.     For i = 0 To j
  6.         myDate = DateAdd("d", i, sDate)
  7.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  8.             NWD = NWD + 1
  9.         End If
  10.     Next
  11.     gNonWorkDay = NWD
  12. End Function
复制代码

作者: yanwei82123300    时间: 2012-6-25 16:43
Henry D. Sy 老师:交货日期是字段名;生产周期是字段名,
交货日期+生产周期=发货日期
如何判断交货日期+生产周期中有多少周六日?或者说如何只计算工作日,周六日不计算?
谢谢
作者: Henry D. Sy    时间: 2012-6-25 16:49
例如:承诺交货日期字段 6-25 ------------这个应该是订单确认日期吧
      
作者: yanwei82123300    时间: 2012-6-25 16:52
Henry D. Sy 老师我们系统里有与您写的数据类似判断哪一天是六日的表,我现在是想知道如何才能实现7楼的方法!
见下表:IsShopDate是0 为周六日 1为正常工作日

CalendarDate        ShopDay        ShopDate        IsShopDate
2012-1-1        7304        2011-12-30        0
2012-1-2        7305        2012-1-2        1
2012-1-3        7306        2012-1-3        1
2012-1-4        7307        2012-1-4        1
2012-1-5        7308        2012-1-5        1
2012-1-6        7309        2012-1-6        1
2012-1-7        7309        2012-1-6        0
2012-1-8        7309        2012-1-6        0
2012-1-9        7310        2012-1-9        1
2012-1-10        7311        2012-1-10        1
2012-1-11        7312        2012-1-11        1
2012-1-12        7313        2012-1-12        1
2012-1-13        7314        2012-1-13        1
2012-1-14        7314        2012-1-13        0
2012-1-15        7314        2012-1-13        0
2012-1-16        7315        2012-1-16        1
2012-1-17        7316        2012-1-17        1
2012-1-18        7317        2012-1-18        1
2012-1-19        7318        2012-1-19        1
2012-1-20        7319        2012-1-20        1
2012-1-21        7319        2012-1-20        0
2012-1-22        7319        2012-1-20        0
2012-1-23        7320        2012-1-23        1
2012-1-24        7321        2012-1-24        1
2012-1-25        7322        2012-1-25        1
2012-1-26        7323        2012-1-26        1
2012-1-27        7324        2012-1-27        1
2012-1-28        7324        2012-1-27        0
2012-1-29        7324        2012-1-27        0
2012-1-30        7325        2012-1-30        1
2012-1-31        7326        2012-1-31        1
2012-2-1        7327        2012-2-1        1
2012-2-2        7328        2012-2-2        1
2012-2-3        7329        2012-2-3        1
2012-2-4        7329        2012-2-3        0
2012-2-5        7329        2012-2-3        0
2012-2-6        7330        2012-2-6        1
2012-2-7        7331        2012-2-7        1
2012-2-8        7332        2012-2-8        1
2012-2-9        7333        2012-2-9        1
2012-2-10        7334        2012-2-10        1
2012-2-11        7334        2012-2-10        0
2012-2-12        7334        2012-2-10        0
2012-2-13        7335        2012-2-13        1
2012-2-14        7336        2012-2-14        1
2012-2-15        7337        2012-2-15        1
2012-2-16        7338        2012-2-16        1
2012-2-17        7339        2012-2-17        1
2012-2-18        7339        2012-2-17        0
2012-2-19        7339        2012-2-17        0
2012-2-20        7340        2012-2-20        1
2012-2-21        7341        2012-2-21        1
2012-2-22        7342        2012-2-22        1
2012-2-23        7343        2012-2-23        1
2012-2-24        7344        2012-2-24        1
2012-2-25        7344        2012-2-24        0
2012-2-26        7344        2012-2-24        0
2012-2-27        7345        2012-2-27        1
2012-2-28        7346        2012-2-28        1
2012-2-29        7347        2012-2-29        1
2012-3-1        7348        2012-3-1        1
2012-3-2        7349        2012-3-2        1
2012-3-3        7349        2012-3-2        0
2012-3-4        7349        2012-3-2        0
2012-3-5        7350        2012-3-5        1
2012-3-6        7351        2012-3-6        1
2012-3-7        7352        2012-3-7        1
2012-3-8        7353        2012-3-8        1
2012-3-9        7354        2012-3-9        1
2012-3-10        7354        2012-3-9        0
2012-3-11        7354        2012-3-9        0
2012-3-12        7355        2012-3-12        1
2012-3-13        7356        2012-3-13        1
2012-3-14        7357        2012-3-14        1
2012-3-15        7358        2012-3-15        1
2012-3-16        7359        2012-3-16        1
2012-3-17        7359        2012-3-16        0
2012-3-18        7359        2012-3-16        0
2012-3-19        7360        2012-3-19        1
2012-3-20        7361        2012-3-20        1
2012-3-21        7362        2012-3-21        1
2012-3-22        7363        2012-3-22        1
2012-3-23        7364        2012-3-23        1
2012-3-24        7364        2012-3-23        0
2012-3-25        7364        2012-3-23        0
2012-3-26        7365        2012-3-26        1
2012-3-27        7366        2012-3-27        1
2012-3-28        7367        2012-3-28        1
2012-3-29        7368        2012-3-29        1
2012-3-30        7369        2012-3-30        1
2012-3-31        7369        2012-3-30        0
2012-4-1        7369        2012-3-30        0
2012-4-2        7370        2012-4-2        1
2012-4-3        7371        2012-4-3        1
2012-4-4        7372        2012-4-4        1
2012-4-5        7373        2012-4-5        1
2012-4-6        7374        2012-4-6        1
2012-4-7        7374        2012-4-6        0
2012-4-8        7374        2012-4-6        0
2012-4-9        7375        2012-4-9        1
2012-4-10        7376        2012-4-10        1
2012-4-11        7377        2012-4-11        1
2012-4-12        7378        2012-4-12        1
2012-4-13        7379        2012-4-13        1
2012-4-14        7379        2012-4-13        0
2012-4-15        7379        2012-4-13        0
2012-4-16        7380        2012-4-16        1
2012-4-17        7381        2012-4-17        1
2012-4-18        7382        2012-4-18        1
2012-4-19        7383        2012-4-19        1
2012-4-20        7384        2012-4-20        1
2012-4-21        7384        2012-4-20        0
2012-4-22        7384        2012-4-20        0
2012-4-23        7385        2012-4-23        1
2012-4-24        7386        2012-4-24        1
2012-4-25        7387        2012-4-25        1
2012-4-26        7388        2012-4-26        1
2012-4-27        7389        2012-4-27        1
2012-4-28        7389        2012-4-27        0
2012-4-29        7389        2012-4-27        0
2012-4-30        7390        2012-4-30        1
2012-5-1        7391        2012-5-1        1
2012-5-2        7392        2012-5-2        1
2012-5-3        7393        2012-5-3        1
2012-5-4        7394        2012-5-4        1
2012-5-5        7394        2012-5-4        0
2012-5-6        7394        2012-5-4        0
2012-5-7        7395        2012-5-7        1
2012-5-8        7396        2012-5-8        1
2012-5-9        7397        2012-5-9        1
2012-5-10        7398        2012-5-10        1
2012-5-11        7399        2012-5-11        1
2012-5-12        7399        2012-5-11        0
2012-5-13        7399        2012-5-11        0
2012-5-14        7400        2012-5-14        1
2012-5-15        7401        2012-5-15        1
2012-5-16        7402        2012-5-16        1
2012-5-17        7403        2012-5-17        1
2012-5-18        7404        2012-5-18        1
2012-5-19        7404        2012-5-18        0
2012-5-20        7404        2012-5-18        0
2012-5-21        7405        2012-5-21        1
2012-5-22        7406        2012-5-22        1
2012-5-23        7407        2012-5-23        1
2012-5-24        7408        2012-5-24        1
2012-5-25        7409        2012-5-25        1
2012-5-26        7409        2012-5-25        0
2012-5-27        7409        2012-5-25        0
2012-5-28        7410        2012-5-28        1
2012-5-29        7411        2012-5-29        1
2012-5-30        7412        2012-5-30        1
2012-5-31        7413        2012-5-31        1
2012-6-1        7414        2012-6-1        1
2012-6-2        7414        2012-6-1        0
2012-6-3        7414        2012-6-1        0
2012-6-4        7415        2012-6-4        1
2012-6-5        7416        2012-6-5        1
2012-6-6        7417        2012-6-6        1
2012-6-7        7418        2012-6-7        1
2012-6-8        7419        2012-6-8        1
2012-6-9        7419        2012-6-8        0
2012-6-10        7419        2012-6-8        0
2012-6-11        7420        2012-6-11        1
2012-6-12        7421        2012-6-12        1
2012-6-13        7422        2012-6-13        1
2012-6-14        7423        2012-6-14        1
2012-6-15        7424        2012-6-15        1
2012-6-16        7424        2012-6-15        0
2012-6-17        7424        2012-6-15        0
2012-6-18        7425        2012-6-18        1
2012-6-19        7426        2012-6-19        1
2012-6-20        7427        2012-6-20        1
2012-6-21        7428        2012-6-21        1
2012-6-22        7429        2012-6-22        1
2012-6-23        7429        2012-6-22        0
2012-6-24        7429        2012-6-22        0
2012-6-25        7430        2012-6-25        1
2012-6-26        7431        2012-6-26        1
2012-6-27        7432        2012-6-27        1
2012-6-28        7433        2012-6-28        1
2012-6-29        7434        2012-6-29        1
2012-6-30        7434        2012-6-29        0
2012-7-1        7434        2012-6-29        0
2012-7-2        7435        2012-7-2        1
2012-7-3        7436        2012-7-3        1
2012-7-4        7437        2012-7-4        1
2012-7-5        7438        2012-7-5        1
2012-7-6        7439        2012-7-6        1
2012-7-7        7439        2012-7-6        0
2012-7-8        7439        2012-7-6        0
2012-7-9        7440        2012-7-9        1
2012-7-10        7441        2012-7-10        1
2012-7-11        7442        2012-7-11        1
2012-7-12        7443        2012-7-12        1
2012-7-13        7444        2012-7-13        1
2012-7-14        7444        2012-7-13        0
2012-7-15        7444        2012-7-13        0
2012-7-16        7445        2012-7-16        1
2012-7-17        7446        2012-7-17        1
2012-7-18        7447        2012-7-18        1
2012-7-19        7448        2012-7-19        1
2012-7-20        7449        2012-7-20        1
2012-7-21        7449        2012-7-20        0
2012-7-22        7449        2012-7-20        0
2012-7-23        7450        2012-7-23        1
2012-7-24        7451        2012-7-24        1
2012-7-25        7452        2012-7-25        1
2012-7-26        7453        2012-7-26        1
2012-7-27        7454        2012-7-27        1
2012-7-28        7454        2012-7-27        0
2012-7-29        7454        2012-7-27        0
2012-7-30        7455        2012-7-30        1
2012-7-31        7456        2012-7-31        1
2012-8-1        7457        2012-8-1        1
2012-8-2        7458        2012-8-2        1
2012-8-3        7459        2012-8-3        1
2012-8-4        7459        2012-8-3        0
2012-8-5        7459        2012-8-3        0
2012-8-6        7460        2012-8-6        1
2012-8-7        7461        2012-8-7        1
2012-8-8        7462        2012-8-8        1
2012-8-9        7463        2012-8-9        1
2012-8-10        7464        2012-8-10        1
2012-8-11        7464        2012-8-10        0
2012-8-12        7464        2012-8-10        0
2012-8-13        7465        2012-8-13        1
2012-8-14        7466        2012-8-14        1
2012-8-15        7467        2012-8-15        1
2012-8-16        7468        2012-8-16        1
2012-8-17        7469        2012-8-17        1
2012-8-18        7469        2012-8-17        0
2012-8-19        7469        2012-8-17        0
2012-8-20        7470        2012-8-20        1
2012-8-21        7471        2012-8-21        1
2012-8-22        7472        2012-8-22        1
2012-8-23        7473        2012-8-23        1
2012-8-24        7474        2012-8-24        1
2012-8-25        7474        2012-8-24        0
2012-8-26        7474        2012-8-24        0
2012-8-27        7475        2012-8-27        1
2012-8-28        7476        2012-8-28        1
2012-8-29        7477        2012-8-29        1
2012-8-30        7478        2012-8-30        1
2012-8-31        7479        2012-8-31        1
2012-9-1        7479        2012-8-31        0
2012-9-2        7479        2012-8-31        0
2012-9-3        7480        2012-9-3        1
2012-9-4        7481        2012-9-4        1
2012-9-5        7482        2012-9-5        1
2012-9-6        7483        2012-9-6        1
2012-9-7        7484        2012-9-7        1
2012-9-8        7484        2012-9-7        0
2012-9-9        7484        2012-9-7        0
2012-9-10        7485        2012-9-10        1
2012-9-11        7486        2012-9-11        1
2012-9-12        7487        2012-9-12        1
2012-9-13        7488        2012-9-13        1
2012-9-14        7489        2012-9-14        1
2012-9-15        7489        2012-9-14        0
2012-9-16        7489        2012-9-14        0
2012-9-17        7490        2012-9-17        1
2012-9-18        7491        2012-9-18        1
2012-9-19        7492        2012-9-19        1
2012-9-20        7493        2012-9-20        1
2012-9-21        7494        2012-9-21        1
2012-9-22        7494        2012-9-21        0
2012-9-23        7494        2012-9-21        0
2012-9-24        7495        2012-9-24        1
2012-9-25        7496        2012-9-25        1
2012-9-26        7497        2012-9-26        1
2012-9-27        7498        2012-9-27        1
2012-9-28        7499        2012-9-28        1
2012-9-29        7499        2012-9-28        0
2012-9-30        7499        2012-9-28        0
2012-10-1        7500        2012-10-1        1
2012-10-2        7501        2012-10-2        1
2012-10-3        7502        2012-10-3        1
2012-10-4        7503        2012-10-4        1
2012-10-5        7504        2012-10-5        1
2012-10-6        7504        2012-10-5        0
2012-10-7        7504        2012-10-5        0
2012-10-8        7505        2012-10-8        1
2012-10-9        7506        2012-10-9        1
2012-10-10        7507        2012-10-10        1
2012-10-11        7508        2012-10-11        1
2012-10-12        7509        2012-10-12        1
2012-10-13        7509        2012-10-12        0
2012-10-14        7509        2012-10-12        0
2012-10-15        7510        2012-10-15        1
2012-10-16        7511        2012-10-16        1
2012-10-17        7512        2012-10-17        1
2012-10-18        7513        2012-10-18        1
2012-10-19        7514        2012-10-19        1
2012-10-20        7514        2012-10-19        0
2012-10-21        7514        2012-10-19        0
2012-10-22        7515        2012-10-22        1
2012-10-23        7516        2012-10-23        1
2012-10-24        7517        2012-10-24        1
2012-10-25        7518        2012-10-25        1
2012-10-26        7519        2012-10-26        1
2012-10-27        7519        2012-10-26        0
2012-10-28        7519        2012-10-26        0
2012-10-29        7520        2012-10-29        1
2012-10-30        7521        2012-10-30        1
2012-10-31        7522        2012-10-31        1

作者: yanwei82123300    时间: 2012-6-25 16:57
是订单确认日期
作者: Henry D. Sy    时间: 2012-6-25 17:05
本帖最后由 Henry D. Sy 于 2012-6-25 17:25 编辑
  1. Public Function gDeliveryDay(sDate As Date, intPeriod As Integer) As Date
  2.     Dim i As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     For i = 0 To intPeriod
  5.         myDate = DateAdd("d", i, sDate)
  6.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  7.             NWD = NWD + 1
  8.         End If
  9.     Next
  10.     gDeliveryDay = DateAdd("d", intPeriod, sDate) + NWD
  11. End Function
复制代码
没有测试,你自己测试一下看看!再修改!
作者: Henry D. Sy    时间: 2012-6-25 17:07
sdate 订单确定日
intperiod 周期天数
好像还不对,加上非工作天数后,这段额外的天数中也许又有周六日!!!!!!!!
作者: yanwei82123300    时间: 2012-6-25 19:35
Henry D. Sy 老师,谢谢帮助明天回公司试试
作者: Henry D. Sy    时间: 2012-6-25 20:00
yanwei82123300 发表于 2012-6-25 19:35
Henry D. Sy 老师,谢谢帮助明天回公司试试

这个结果肯定不行,我试试递归!
作者: Henry D. Sy    时间: 2012-6-25 20:11
  1. Public Function gDeliveryDay(sDate As Date, intPeriod As Integer) As Date
  2.     Dim i As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     Dim gDate As Date
  5.     For i = 1 To intPeriod
  6.         myDate = DateAdd("d", i, sDate)
  7.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  8.             NWD = NWD + 1
  9.         End If
  10.     Next
  11.         gDate = DateAdd("d", intPeriod, sDate)
  12.     If NWD = 0 Then
  13.         gDeliveryDay = gDate
  14.     Else
  15.         gDeliveryDay = gDeliveryDay(gDate, NWD)
  16.     End If
  17. End Function
复制代码
引用
  1. SELECT 表1.下单日期, 表1.周期, gDeliveryDay([下单日期],[周期]) AS 交货日期
  2. FROM 表1;
复制代码
[attach]49480[/attach]
作者: caoguangyao    时间: 2012-6-25 21:14
请参考如下函数:
Function SE(sDay As Date, eDay As Date)
Dim intTotalDays As Integer '总天数
Dim intWeekendDays As Integer '总周六、日天数
'SE总工作日天数=总天数-总周六、日天数
Select Case DatePart("w", sDay, vbMonday)
    Case Is = 6
        sDay = DateAdd("d", sDay, 2)
    Case Is = 7
        sDay = DateAdd("d", sDay, 1)
End Select

Select Case DatePart("w", eDay, vbMonday)
    Case Is = 6
        eDay = DateAdd("d", eDay, -1)
    Case Is = 7
        eDay = DateAdd("d", eDay, -2)
End Select

intTotalDays = DateDiff("d", sDay, eDay) + 1
intWeekendDays = DateDiff("ww", sDay, eDay, vbMonday) * 2
SE = intTotalDays - intWeekendDays
End Function
作者: Henry D. Sy    时间: 2012-6-26 00:33
http://www.office-cn.net/thread-113018-1-1.html
作者: yanwei82123300    时间: 2012-6-26 08:21
谢谢帮助!!{:soso_e179:}
作者: layaman_999    时间: 2012-6-26 08:43
Function JHRQ(ByVal ddrq As Date, ByVal sczq As Long) As Date

'参数说明:ddrq订单日期,sczq生产周期
'函数功能:订单日期(不计周日六)+生产周期(不计周日六),计算出发货日期
'layaman_999
'容易误解的:
'1.周六\日确定的订单,顺延确定日期为周一(例如周六的订单,生产周期1天的话,应该是下周二交货)
'2.发货日期如遇上周六\日,,发货确定日期为周一(例如周五的订单,生产周期1天的话,应该是下周一交货)

Dim i As Long
Dim j As Long
Dim K As Integer

j = 0

For i = 1 To sczq
K = Weekday(ddrq + j)
Select Case K
   Case 1 '星期日
    j = j + 1
   Case 7 '星期六
    j = j + 2
End Select
  j = j + 1
Next i

JHRQ = ddrq + j

K = Weekday(JHRQ)
Select Case K
   Case 1 '星期日
    JHRQ = JHRQ + 1
   Case 7 '星期六
    JHRQ = JHRQ + 2
End Select


End Function

作者: yanwei82123300    时间: 2012-6-26 12:18
layaman_999 谢谢分享!{:soso_e181:}
作者: layaman_999    时间: 2012-6-26 14:14
yanwei82123300 发表于 2012-6-26 12:18
layaman_999 谢谢分享!

法定节假日也应该考虑进去吧,如五一、国庆
作者: yanwei82123300    时间: 2012-6-26 15:17
layaman_999 同意此观点,我公司的主计划已经考虑了,否则就猪头了1{:soso_e113:}
作者: Henry D. Sy    时间: 2012-6-26 15:22
其他倒还可以,就是端午和中秋,春节需要农历的。
作者: yanwei82123300    时间: 2012-6-26 15:28
这就需要公司的计划部门,和销售部门进行沟通下订单时要考虑中国的特定假期,需要整个公司的运营去考虑了
作者: yanwei82123300    时间: 2012-6-26 15:30
Henry D. Sy 老师请问如何界定五一、国庆,元旦的日期呢?
作者: Henry D. Sy    时间: 2012-6-26 15:39
yanwei82123300 发表于 2012-6-26 15:30
Henry D. Sy 老师请问如何界定五一、国庆,元旦的日期呢?

呵呵
right(format(日期,"yyyymmdd"),4)="0501";"1001";"0101"
作者: yanwei82123300    时间: 2012-6-26 15:59
Henry D. Sy 老师这个语句放到哪里或哪个位置,谢谢
作者: Henry D. Sy    时间: 2012-6-26 16:09
放在循环判断语句中
作者: Henry D. Sy    时间: 2012-6-26 16:14
yanwei82123300 发表于 2012-6-26 15:59
Henry D. Sy 老师这个语句放到哪里或哪个位置,谢谢

try:
  1. Public Function gDeliveryDay(sDate As Date, intPeriod As Integer) As Date
  2.     Dim i As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     Dim gDate As Date
  5.     For i = 1 To intPeriod
  6.         myDate = DateAdd("d", i, sDate)
  7.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  8.             NWD = NWD + 1
  9.         End If
  10.         If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or Right(Format(myDate, _
  11.             "yyyymmdd"), 4) = "0101" Or Right(Format(myDate, "yyyymmdd"), 4) = _
  12.             "1001" Then
  13.             NWD = NWD + 3
  14.         End If
  15.     Next
  16.     gDate = DateAdd("d", intPeriod, sDate)
  17.     If NWD = 0 Then
  18.         gDeliveryDay = gDate
  19.     Else
  20.         gDeliveryDay = gDeliveryDay(gDate, NWD)
  21.     End If
  22. End Function
复制代码

作者: yanwei82123300    时间: 2012-6-26 16:16
If Weekday(myDate) = 1 Or Weekday(myDate) = 7 or right(format(日期,"yyyymmdd"),4)="0501";"1001";"0101"Then
NWD = NWD + 1
        End If
    Next
对吗?谢谢
作者: Henry D. Sy    时间: 2012-6-26 16:18
yanwei82123300 发表于 2012-6-26 16:16
If Weekday(myDate) = 1 Or Weekday(myDate) = 7 or right(format(日期,"yyyymmdd"),4)="0501";"1001";"010 ...

不对
看29楼的。
作者: yanwei82123300    时间: 2012-6-26 16:26
谢谢帮助{:soso_e163:}
作者: Henry D. Sy    时间: 2012-6-26 16:26
29楼的代码:
用订单日期2012-06-25,周期5天,得到交货日为2012-05-07
按理,
2012-06-25+5天=2012-06-30,但6-28,6-29为非工作天,则加上2天,应该是5-02日,但又存在5.1节日又加三天,应为5-05日。
05-05又是星期六,又加一天成了05-06,正好05-06是星期日,再加一天,最终结果为2012-05-07
作者: yanwei82123300    时间: 2012-6-26 16:34
用订单日期2012-06-25,周期5天,得到交货日为2012-07-02
6-28 6-29 为周四周五 6-30为周六因此后退2天 为2012-07-02
作者: yanwei82123300    时间: 2012-6-26 16:37
看图片!!最后一条数据
作者: Henry D. Sy    时间: 2012-6-26 16:43
yanwei82123300 发表于 2012-6-26 16:37
看图片!!最后一条数据

最后一条记录怎么了
作者: Henry D. Sy    时间: 2012-6-26 16:45
你是用不考虑假日的与考虑假日的对比较吗
相差八天?
作者: Henry D. Sy    时间: 2012-6-26 16:46
对了,我很少有假期的,我根本不知道元旦,五一,国庆放假几天??
一律用三天计算,你能告诉我吗?{:soso_e113:}
作者: yanwei82123300    时间: 2012-6-26 16:48
本帖最后由 yanwei82123300 于 2012-6-26 16:50 编辑
Henry D. Sy 发表于 2012-6-26 16:26
29楼的代码:
用订单日期2012-06-25,周期5天,得到交货日为2012-05-07
按理,


没事!准确不明白您怎么往回算!谢谢!!
作者: yanwei82123300    时间: 2012-6-26 16:49
五一 1天 十一 3天 元旦 1天,注意休息!!谢谢
作者: yanwei82123300    时间: 2012-6-26 16:51
清明节1天,端午1天,八月十五 1天 春节3天
作者: Henry D. Sy    时间: 2012-6-26 16:52
yanwei82123300 发表于 2012-6-26 16:49
五一 1天 十一 3天 元旦 1天,注意休息!!谢谢
  1. '---------------------------------------------------------------------------------------
  2. ' Procedure : DeliveryDay
  3. ' DateTime  : 2012-6-25 23:25
  4. ' Author    : Henry D. Sy
  5. ' 参数      : OrderDate 下单日期
  6. '
  7. '           : intPeriod 交货周期(以天为单位)
  8. '
  9. '根据下单日期及交货周期计算剔除非工作日(周六,日)以及五一,国庆,元旦之交货日期
  10. '按理:交货日期=下单日期+周期+非工作日天数,但加上这段额外的天数中也许又有周六日
  11. '本例的重点就是利用递归函数来计算这非工作日中的非工作日.....
  12. '---------------------------------------------------------------------------------------
  13. '
  14. Public Function DeliveryDay(OrderDate As Date, intPeriod As Integer) As Date

  15.     Dim i As Integer          '循环变量

  16.     Dim NWD As Integer        '保存非工作日天数(Non_Work_Days)

  17.     Dim myDate As Date        '生产期间每天的日期,用来判断是否为NWD

  18.     Dim gDate As Date         '计算过程中的临时日期值

  19.     On Error GoTo DeliveryDay_Error

  20.     For i = 1 To intPeriod    '这里i取值从1开始,不考虑0,因为接单当日无需判断是否工作日

  21.         myDate = DateAdd("d", i, OrderDate)
  22.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  23.             NWD = NWD + 1
  24.         End If
  25.         '下面考虑五一,国庆,元旦
  26.         If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _
  27.            Right(Format(myDate, "yyyymmdd"), 4) = "0101" Then
  28.             NWD = NWD + 1
  29.         ElseIf Right(Format(myDate, "yyyymmdd"), 4) = "1001" Then
  30.             NWD = NWD + 3
  31.         End If
  32.     Next
  33.     '判断及计算工作日结束

  34.     gDate = DateAdd("d", intPeriod, OrderDate)  '在不考虑工作日时:交货日期=下单日期+周期
  35.     '下面开始考虑工作日
  36.     If NWD = 0 Then   '没有非工作日

  37.         DeliveryDay = gDate           '交货日期=下单日期+周期

  38.         '有非工作日
  39.     Else
  40.         DeliveryDay = DeliveryDay(gDate, NWD)    '为了计算加上非工作日天数后的非工作日,这里函数引用自己本身(递归),继续循环计算至NWD=0
  41.     End If

  42.     On Error GoTo 0
  43.     Exit Function

  44. DeliveryDay_Error:

  45.     MsgBox "Error " & Err.Number & " (" & Err.Description & ") "
  46. End Function
复制代码

作者: Henry D. Sy    时间: 2012-6-26 16:54
结果
[attach]49506[/attach]
作者: yanwei82123300    时间: 2012-6-26 16:55
{:soso_e100:}{:soso_e181:}非常感谢!!大公无私!!
作者: layaman_999    时间: 2012-6-26 23:19
33.        If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _

34.           Right(Format(myDate, "yyyymmdd"), 4) = "0101" Then

35.            NWD = NWD + 1

36.        ElseIf Right(Format(myDate, "yyyymmdd"), 4) = "1001" Then

37.            NWD = NWD + 3

38.        End If

==================================
改为这样,可能好理解些:
dim Str1 as string
str1 = Format(myDate, "mmdd")
select case str1
case "0501", "0101"
   NWD = NWD + 1
case  "1001"
   NWD = NWD + 3
end select
作者: Henry D. Sy    时间: 2012-6-27 10:11
layaman_999 发表于 2012-6-26 23:19
33.        If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _

34.           Right(Format(myDat ...

谢谢,layaman_999 提醒!!
作者: Henry D. Sy    时间: 2012-6-27 10:21
yanwei82123300 发表于 2012-6-26 16:51
清明节1天,端午1天,八月十五 1天 春节3天

增加农历节日
http://www.office-cn.net/forum.p ... mp;extra=#pid660056




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3