Показать полную графическую версию : [решено] Сравнить время в VBS
Morpheus
17-01-2012, 18:30
Всем привет!
Есть переменная со временем в стандартном формате hh:mm:ss, есть вторая, nTime = Time в которую пишется ну вы поняли что :)
Как бы их сравнить?
Значение в первой переменной меняется раз в несколько минут. Разумеется будут переходы через 0 часов и надо избежать ошибок типа "с 23:59:40 по 0:01:01 прошло -23 часа...". В другой переменной есть дата, можно в принципе и её задействовать при необходимости.
Попалась мне DateDiff (http://www.w3schools.com/vbscript/tryit.asp?filename=vbdemo_datediff_func), но она почему-то не работает даже у них на сайте...
megaloman
17-01-2012, 20:47
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)
Morpheus, а если поточнее, что именно надо сравнивать (физический смысл величин)? Ибо я завсегда пользуюсь именно DateDiff. Суть в том, что сравнивать надо именно полные дату-время (ну, или привести их к этому типу данных).
Morpheus
17-01-2012, 22:28
Спасибо! Действительно работает :)
У меня не срабатывало потому, что я не умею задавать переменные. Если точнее, задавал в одной процедуре, а рассчитывал поиспользовать в другой - не вышло :)
У них (http://www.w3schools.com/vbscript/tryit.asp?filename=vbdemo_datediff_func) не срабатывало из-за "Jan". Стоило заменить на "01" и поехало. А я достаточно времени потратил на приведение к их формату. Шайсе... Работает только в IE, это нормально?
Кстати работает и если сравнивать только время, без даты, но наверное будут траблы при переходе в следующие сутки.
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'
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.