Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сравнить время в VBS (http://forum.oszone.net/showthread.php?t=225506)

Morpheus 17-01-2012 18:30 1838151

Сравнить время в VBS
 
Всем привет!

Есть переменная со временем в стандартном формате hh:mm:ss, есть вторая,
Код:

nTime = Time
в которую пишется ну вы поняли что :)
Как бы их сравнить?
Значение в первой переменной меняется раз в несколько минут. Разумеется будут переходы через 0 часов и надо избежать ошибок типа "с 23:59:40 по 0:01:01 прошло -23 часа...". В другой переменной есть дата, можно в принципе и её задействовать при необходимости.

Попалась мне DateDiff, но она почему-то не работает даже у них на сайте...

megaloman 17-01-2012 20:47 1838310

Morpheus, у меня получилось без проблем, только для определения времени (точнее даты-времени) я использую функцию Now. Здесь разницу получаю в секундах. По видимому, можно тупо сравнить, что больше, одно время или другое, не используя DateDiff, если не интересна разница.
Код:

a = Now
MsgBox " Не нажимайте ОК некоторое время" + vbCrLf + "Чтобы проверить, переставьте системные дату и время"
b = Now
   
s = DateDiff("s", a, b)
   
If a > b Then L = ">" Else L = "<"
   
MsgBox CStr(b) + vbCrLf + CStr(a) + vbCrLf + CStr(s) + vbCrLf + CStr(a) + L + CStr(b)


Iska 17-01-2012 21:34 1838350

Morpheus, а если поточнее, что именно надо сравнивать (физический смысл величин)? Ибо я завсегда пользуюсь именно DateDiff. Суть в том, что сравнивать надо именно полные дату-время (ну, или привести их к этому типу данных).

Morpheus 17-01-2012 22:28 1838407

Спасибо! Действительно работает :)
У меня не срабатывало потому, что я не умею задавать переменные. Если точнее, задавал в одной процедуре, а рассчитывал поиспользовать в другой - не вышло :)
У них не срабатывало из-за "Jan". Стоило заменить на "01" и поехало. А я достаточно времени потратил на приведение к их формату. Шайсе... Работает только в IE, это нормально?
Кстати работает и если сравнивать только время, без даты, но наверное будут траблы при переходе в следующие сутки.

Iska 17-01-2012 22:57 1838438

Morpheus, проблема в том, что для иноязычных пользователей сие как раз может и сработать :).

Именно в VBScript есть ещё одна полезная функция — SetLocale(), иногда помогающая при переводе текстового представления даты/времени в тип дата/время. Например, приведённый пример для нас мог бы выглядеть так (я заведомо привожу избыточный код — для удобства демонстрации; исполнять лучше под «cscript.exe» — много вывода):
Код:

Option Explicit

Dim dtDateFirst
Dim dtDateSecond

Dim prevLocale


prevLocale = SetLocale("en-us")
WScript.Echo prevLocale

dtDateFirst  = CDate("31-Jan-09 00:00:00")
dtDateSecond = CDate("31-Jan-10 23:59:00")

prevLocale = SetLocale(prevLocale)
WScript.Echo prevLocale

WScript.Echo
WScript.Echo FormatDateTime(dtDateFirst,  vbLongDate) & ", " & FormatDateTime(dtDateFirst,  vbLongTime)
WScript.Echo FormatDateTime(dtDateSecond, vbLongDate) & ", " & FormatDateTime(dtDateSecond,  vbLongTime)

WScript.Echo
WScript.Echo DateDiff("yyyy", dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("q",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("m",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("y",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("d",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("w",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("ww",  dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("h",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("n",    dtDateFirst, dtDateSecond)
WScript.Echo DateDiff("s",    dtDateFirst, dtDateSecond)

WScript.Quit 0

Результат
Цитата:

Код:

1049
1033

суббота, 31 января 2009 года, 00:00:00
воскресенье, 31 января 2010 года, 23:59:00

1
4
12
365
365
52
53
8783
527039
31622340


У Вас может быть немного иной формат вывода даты — я использую региональные настройки даты/времени, отличные от умолчальных.

И, вот, если в этом коде закомментировать относящееся к «SetLocale()» — мы закономерно получим ошибку времени исполнения на функции преобразования типа «CDate()»:
Цитата:

Ошибка выполнения Microsoft VBScript (12, 1) : Несоответствие типа: 'CDate'


Время: 12:54.

Время: 12:54.
© OSzone.net 2001-