Что нового

Как преобразовать результат функции _NowCalc в число?

Paul_Markey

Новичок
Сообщения
18
Репутация
1
Задача следующая: Имеется GUI окно, в котором пользователь вводит определенное количество часов, минут и секунд. Данные обрабатываются и добавляются к текущей дате с помощью функции _DateAdd. Затем, необходимо сравнить результат функции _DateAdd c _NowCalc. _NowCalc >= _DateAdd не сработал. Появился вариант преобразовать даты в числа и их уже сравнить. Как это реализовать не знаю. Или есть другой способ сравнения Даты и времени? _TicksToTime думаю не подойдет. Или ошибаюсь?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Paul_Markey,
Используйте с опцией секунды
Код:
_DateDiff()
и сравнивайте результат.

Два примера. Оба цикла будут работать по одной минуте.
Код:
#include <Date.au3>

;~ First:
$sStart = _DateAdd('n', 1, _NowCalc())
ConsoleWrite('1 Start time: ' & _NowCalc() & @LF)
ToolTip(_NowCalc(), 0, 0)
While _DateDiff('s', _NowCalc(), $sStart)
	Sleep(500)
	ToolTip(_NowCalc(), 0, 0)
WEnd
ConsoleWrite('1 End time: ' & _NowCalc() & @LF)
ConsoleWrite('---' & @LF)

;~ Second:
ConsoleWrite('2 Start time: ' & _NowCalc() & @LF)
$iDateNum = Number(StringRegExpReplace(_DateAdd('n', 1, _NowCalc()), '[^\d]', ''))
ToolTip(_NowCalc(), 0, 0)
While Number(StringRegExpReplace(_NowCalc(), '[^\d]', '')) < $iDateNum
	Sleep(500)
	ToolTip(_NowCalc(), 0, 0)
WEnd
ConsoleWrite('2 End time: ' & _NowCalc() & @LF)
А так, ИМХО, самый простой вариант. Цикл будет работать 1 мин. 3 сек.
Код:
;~ Пользователь ввел:
Global $iHour = 0, $iMin = 1, $iSec = 3

Global $iTimer, $iTimeDiff = ($iHour * 60 * 60 + $iMin * 60 + $iSec) * 1000 - @MSEC

ConsoleWrite('Start time: ' & _MyNowTime() & @LF)
ToolTip(_MyNowTime(), 0, 0)
$iTimer = TimerInit()
While TimerDiff($iTimer) < $iTimeDiff
	Sleep(1000)
	ToolTip(_MyNowTime(), 0, 0)
WEnd
ConsoleWrite('End time: ' & _MyNowTime() & @LF)

Func _MyNowTime()
	Return @HOUR & ':' & @MIN & ':' & @SEC
EndFunc   ;==>_MyNowTime
 
Верх