Здесь есть ошибка / проблема, но не с той частью, которую вы подозреваете.
Проблема здесь в том, что функция, которая преобразует базовое значение варианта в строку, неправильно обрабатывает отрицательные числа.
Значение результата TimeSerial, однако, является правильным, но преобразование его в строку - нет.
Функция TimeSerial обещает вернуть только то, что является временем , если вы предоставите действительные значения времени, поэтому 0-23 для часа и 0-59 для минут и секунд. Если вы начнете использовать отрицательные числа, вы получите относительное значение, и эта часть, по-видимому, не обрабатывается правильно при преобразовании результата в строку.
Как пример:
WScript.Echo CDbl(TimeSerial(1, 0, -15))*24
WScript.Echo 1-15/(60*60)
дает тот же вывод:
0,995833333333333
0,995833333333333
давайте включим время, которое вы хотели иметь:
WScript.Echo CDbl(TimeSerial(0, 59, 45))*24
, что также дает:
0,995833333333333
И ваш второй пример:
WScript.Echo CDbl(TimeSerial(0, 0, -15))*24
WScript.Echo -15/(60*60)
дает:
-4,16666666666667E-03
-4,16666666666667E-03
Как видите, вы получаете отрицательное значение, не время .