从给定日期/时间减去指定的小时数以获得新的日期/时间

时间:2017-07-21 19:03:54

标签: vba excel-vba date vb6 excel

我正在尝试通过从给定的截止日期/时间减去给定的小时数来计算如何计算日期/时间,以便我知道何时需要按顺序启动产品组件的处理步骤让它及时完成运送给客户。

例如,产品需要准备好在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年12月9日04:24之前准备好装配,以准时开始步骤05

我花了一天时间寻找一个足够接近我和我认为必须使用DateTime函数做的事情的例子,我只是不确定目前是什么

3 个答案:

答案 0 :(得分:3)

您可以从日期中减去n小时,只需从中减去n/24即可。您还可以使用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

P.S。第三种方法是使用TimeValue("1:30:0"),相当于TimeSerial(1, 30, 0)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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