【问题标题】:Subtract a specified number of hours from a given date/time to get a new date/time从给定的日期/时间减去指定的小时数以获得新的日期/时间
【发布时间】:2017-12-27 22:34:36
【问题描述】:

我试图弄清楚如何通过从给定的到期日期/时间减去给定的小时数来计算日期/时间,以便我知道何时需要按顺序在产品组件上启动流程步骤及时完成并运送给客户。

例如,产品需要在 2017 年 9 月 15 日 15:00 之前准备好发货给客户

最后的组装和验证步骤,从最后到第一,是

  • 第 15 步 - 需要 12.6 小时才能完成
  • 第 10 步 - 需要 32.1 小时才能完成
  • 步骤 05 - 需要 25.9 小时才能完成

逆向工作

  • 第 15 步需要在 2017 年 9 月 15 日 15:00 之前完成才能发货给客户
  • 第 10 步需要在 2017 年 9 月 15 日 02:24 之前完成,才能按时开始第 15 步
  • 步骤 05 需要在 2017 年 9 月 13 日 06:18 之前完成才能按时开始步骤 10
  • 所有组件都需要在 2017 年 9 月 12 日凌晨 4 点 24 分之前准备好组装,以便按时开始步骤 05

我花了一天的时间寻找一个与我想要的足够接近的示例,我认为我必须对 DateTime 函数做一些事情,我只是不确定目前是什么

【问题讨论】:

  • 这些步骤总是连续的,还是可以并行运行?我们是否应该始终假设 24 小时工作日。似乎是从完成日期时间中减去三个时间的简单总和:=A1 - (SUM(B1:B3)/24) 其中 A1 是发货日期和时间,B1:B3 是每个步骤所需时间的位置。您可以修改公式以执行每一行。
  • @ScottCraner - 在某些情况下,可以并行运行一些流程(尽管这将是基于机器可用性的车间决策)。在大多数情况下,工作日是 24 小时,但在某些情况下(即库存),工作日可能会因轮班而缩短

标签: vba excel date vb6


【解决方案1】:

您可以通过简单地从中减去 n/24 来从日期中减去 n 小时。您还可以使用TimeSerial 函数减去小时、分钟和秒。这个例子说明了这两种方法,它使用这两种方法从当前时间中减去 1 个半小时。

Sub substractDates()
  Dim d1 As Date, d2 As Date, d3 as Date
  d1 = Now()
  d2 = d1 - TimeSerial(1, 30, 0)
  d3 = d1 - 1.5 / 24
  Debug.Print d1, d2, d3
End Sub

附言第三种方法是使用TimeValue("1:30:0"),它相当于TimeSerial(1, 30, 0)

【讨论】:

  • 隐式类型转换...我会这样纠正它:d1 As Double, d1 = CDbl(Now()), d3 = CDate(d1 - 1.5 / 24)
【解决方案2】:

这个宏会给你一个如何设置它的想法:它可以进一步处理以使用用户输入或从列表中花费时间。

Sub test()
Dim dtmstart As Date
Dim steps(2) As Double
Dim duration, hours As Double
dtmstart = "2017/9/15 15:00"
steps(0) = 12.6
steps(1) = 32.1
steps(2) = 25.9

MsgBox "Last step will need to be completed by: " & dtmstart
For Each c In steps
'convert hours to days
hours = c / 24
duration = dtmstart - hours
dtmstart = Application.Text(duration, "yyyy-mm-dd hh:mm")
MsgBox dtmstart
Next c
End Sub

【讨论】:

    【解决方案3】:

    DateAdd 方法用于添加或减去 Date 对象。第一个参数是区间类型。在下面的代码中,“h”代表小时,“n”代表分钟。要向后计算,请将小时和分钟输入为负值。

    Dim dtShipTime As Date
    Dim dtStep15Start As Date
    Dim dtStep10Start As Date
    Dim dtStep05Start As Date
    
    dtShipTime = #9/15/2017 3:00:00 PM#
    
    dtStep15Start = DateAdd("h", -12, dtShipTime)
    dtStep15Start = DateAdd("n", -36, dtStep15Start)
    
    dtStep10Start = DateAdd("h", -32, dtStep15Start)
    dtStep10Start = DateAdd("n", -6, dtStep10Start)
    
    dtStep05Start = DateAdd("h", -25, dtStep10Start)
    dtStep05Start = DateAdd("n", -54, dtStep05Start)
    

    参考 http://www.chennaiiq.com/developers/reference/visual_basic/functions/dateadd.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多