We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

# How do I calculate time 4 hours ago in vbs or batch

on
Medium Priority
604 Views
I need to calculate the time 4 hours ago in a batch file or vbs and set it to a system variable.

Time now is 0900
fourHoursAgo = 0500

time now is 0200
fourHoursAgo = 2200
Comment
Watch Question

## View Solution Only

Commented:
Hello Brian,

The code below will popup a message with the time four hours ago in the format you are looking for.  Tell us a little more about the "system variable" part though... Do you mean an enviroment variable?

Nicolas Noakes

***** CODE BELOW ****

's = String to pad (with prefix)
'l = Target length
'c = Character to pad with
Dim p
Dim i
p = s
Do While Len(p) < l
p = c & p
Loop
End Function

'You can use the following units:
'y = year
'm = month
'd = day
'h = hour
'n = minute
's = second

Commented:
Yes, I apologize...

We have a script that calculates the hour as shown below but I need something that can subtract 4 hours from it and set it as an environment variable.

' from the  RunNow.vbs file in the question above, modified to display instead of setting:
Wscript.echo "set YY=" & Right("0" & Year(now()), 2)
Wscript.echo "set MM=" & Right("0" & Month(now()), 2)
Wscript.echo "set DD=" & Right("0" & Day(now()), 2)
Wscript.echo "set Hour=" & Right("0" & Hour(now()), 2)
Wscript.echo "set Min=" & Right("0" & Minute(now()), 2)
Wscript.echo "set Sec=" & Right("0" & Second(now()), 2)
Wscript.echo "set Now=%Hour%-%Min%-Hours"
'  continue the rest

Thanks

Commented:
To subtract 4 hours, set a variable (TgtTime in my first post) to the current time less 4 hours by using the vbscript DateAdd function as follows:

TgtTime = DateAdd("h", -4, now())   'This will set TgtTime to the current time less 4 hours

Now replace every instance of now() in your script with TgtTime to make it use the 4-hours-ago time.

I'll have to get back to you re the environment variable part...

Nicolas

Commented:
Not quite sure what I am doing wrong...

Wscript.Echo "set h= " & DatePart("h", now)
Wscript.echo "set TgtTime=" & DateAdd("h", -4, now())

Wscript.echo "set HSub4=" & Right("0" & Hour(TgtTime), 2)
Wscript.echo "set MSub4=" & Right("0" & Minute(TgtTime), 2)
Wscript.echo "set SSub4=" & Right("0" & Second(TgtTime), 2)

Wscript.Echo "set TgtHour= " & DatePart("hour", TgtTime)
Wscript.echo "set TgtHour=%TgtHour%"

Here is the output  ALL 00   ?????

F:\bin>set h= 13

F:\bin>set TgtTime=10/26/2006 9:20:33 AM

F:\bin>set HSub4=00

F:\bin>set MSub4=00

F:\bin>set SSub4=00

Commented:
TimeNow=now()

Wscript.Echo "set h= " & DatePart("h", TimeNow)
Wscript.echo "set TgtTime=" & TgtTime
Wscript.echo "set HSub4=" & Right("0" & DatePart("h",TgtTime), 2)
Wscript.echo "set MSub4=" & Right("0" & DatePart("m",TgtTime), 2)
Wscript.echo "set SSub4=" & Right("0" & DatePart("s",TgtTime), 2)

Wscript.Echo "set TgtHour= " & DatePart("h", TgtTime)
Commented:
I posted the working version above.  What you were doing wrong was trying to use TgtTime but TgtTime was never set "in VBS/WSH".

The following line would set a variable in the context of a batch file but not for VBS/WSH.
Wscript.echo "set TgtTime=" & DateAdd("h", -4, now())

Not the solution you were looking for? Getting a personalized solution is easy.

Commented:
Excellent...
##### Thanks for using Experts Exchange.

• View three pieces of content (articles, solutions, posts, and videos)
• Ask the experts questions (counted toward content limit)
• Customize your dashboard and profile