我正在尝试通过从给定的截止日期/时间减去给定的小时数来计算如何计算日期/时间,以便我知道何时需要按顺序启动产品组件的处理步骤让它及时完成运送给客户。
例如,产品需要准备好在2017年9月15日15:00之前发货给客户
从最后到第一步的最终装配和验证步骤是
向后工作
我花了一天时间寻找一个足够接近我和我认为必须使用DateTime函数做的事情的例子,我只是不确定目前是什么
答案 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