Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

vbscript: how to convert a date into days and time

Tags:

vbscript

I have last boot time from WMI and it looks as '20141103113859.220250+060'. i want to convert it to number of days and time from the current time.

is it possible?

like image 431
ro ra Avatar asked Dec 08 '22 04:12

ro ra


2 Answers

From Help

Use the SWbemDateTime object to convert these to regular dates and times. Windows 2000/NT and Windows 98/95: SWbemDateTime is not available. To convert WMI dates to FILETIME or VT_DATE format or to parse the date into component year, month, day, hours, and so on, you must write your own code.

Set dtmInstallDate = CreateObject( _
    "WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set objOS = objWMIService.ExecQuery( _
    "Select * from Win32_OperatingSystem")
For Each strOS in objOS
    dtmInstallDate.Value = strOS.InstallDate
    Wscript.Echo dtmInstallDate.GetVarDate
Next

To get help.

http://msdn.microsoft.com/en-us/windows/hardware/hh852363

Install the Windows SDK but just choose the documentation.

like image 186
Serenity Avatar answered Mar 02 '23 21:03

Serenity


Next simple function should work for any argument in valid CIM_DATETIME format.

Function WMIDateStringToDate(dtmDate)
WMIDateStringToDate = ( Left(dtmDate, 4) _
    & "/" & Mid(dtmDate, 5, 2) _
    & "/" & Mid(dtmDate, 7, 2) _
    & " " & Mid(dtmDate, 9, 2) _
    & ":" & Mid(dtmDate,11, 2) _
    & ":" & Mid(dtmDate,13, 2))
End Function

An example:

InstallDate (wmi): 20141205231553.000000+060
InstallDate:       2014/12/05 23:15:53

However, a wmi query could return Null, e.g. VarType(dtmDate)=1 for a particular instance of a date; in next script is the function modified:

option explicit
Dim strWmiDate
strWmiDate = "20141103113859.220250+060"
Wscript.Echo strWmiDate _
  & vbNewLine & WMIDateStringToDate(strWmiDate) _
  & vbNewLine & DateDiff("d", WMIDateStringToDate(strWmiDate), Now) _ 
  & vbNewLine _
  & vbNewLine & WMIDateStringToDate(Null) _
  & vbNewLine & DateDiff("d", WMIDateStringToDate(Null), Now) 



Function WMIDateStringToDate(byVal dtmDate)
  If VarType(dtmDate)=1 Then
      WMIDateStringToDate = FormatDateTime( Now) 'change to whatever you want
  Else
      '
      ' to keep script locale independent:
      ' returns ANSI (ISO 8601) datetime format (24 h)
      '
      ' yyyy-mm-dd HH:MM:SS
      '
      WMIDateStringToDate = Left(dtmDate, 4) _
          & "-" & Mid(dtmDate, 5, 2) _
          & "-" & Mid(dtmDate, 7, 2) _
          & " " & Mid(dtmDate, 9, 2) _
          & ":" & Mid(dtmDate,11, 2) _
          & ":" & Mid(dtmDate,13, 2)
  End If
End Function

Output:

==>cscript 29535638.vbs
20141103113859.220250+060
2014-11-03 11:38:59
157

09.04.2015 15:36:38
0
like image 45
JosefZ Avatar answered Mar 02 '23 22:03

JosefZ