Что нового

[Время, дата] Как правильно создать условие, связанное с датой

xishnik

Новичок
Сообщения
51
Репутация
0
Есть дата, например 2033.01.06 и дата на данный момент времени.
Если дата на данный момент меньше, либо равна дате из примера, то скрипт должен запускаться, иначе выходить.
как это получается у меня(слишком коряво):
Код:
Global $SplitData
;Запуск проверки
_proverka()
;Скрипт
MsgBox(0,"Информация",'Сейчас '&$SplitData[1]&'.'&$SplitData[2]&'.'&$SplitData[3]&' и всё работает')
;Конец скрипта
Func _proverka()
local $primer[3] = ["2033","01","06"]
; Время из интернета
$URL = 'http://time.jp-net.ru/'
$ReadHTML = BinaryToString(InetRead($URL), 4)
$Data = StringRegExp($ReadHTML, '(\d+-\d+-\d+)', 3)
$SplitData = StringSplit($Data[0], '-')
;Вот такая вот проверка
If $SplitData[1] < $primer[0] Then Return
   If $SplitData[1] = $primer[0] Then
	  If $SplitData[2] < $primer[1] Then Return
         If $SplitData[2] = $primer[1] Then
            If $SplitData[3] <= $primer[2] Then Return
         EndIf
   EndIf
;Есть ли другие способы?
Exit
EndFunc
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Зачем вам брать дату из url? Не усложняйте себе жизнь:
Код:
Global $Day = 03
Global $Mon = 02
Global $Year = 2014

Func OnAutoItStart()
    CheckDate()
EndFunc

Func CheckDate()
   If @YEAR <= $Year Then
	  If @MON <= $Mon Then
              If @MDAY <= $Day Then
	             MsgBox(0, "Тест", "Успешно")
              Else
                     _Exit()
              EndIf
	  Else
		 _Exit()
	  EndIf
   Else
	  _Exit()
   EndIf
EndFunc

Func _Exit()
   Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Читайте справку по операторам:
Операторы
Используются следующие операторы:



Оператор Описание
=
Присвоение, например $var = 5 (присвоить 5 переменной $var)
+=
Добавляющее присвоение, например $var += 1 (добавить 1 к текущему значению $var)
-=
Отнимающее присвоение.
*=
Умножающее присвоение.
/=
Делящее присвоение.
&=
Объединяющее присвоение. Пусть, например, $var = "one", тогда после выполнения $var &= 10 значение $var станет равным "one10"




+ Сложение. 10 + 20
- Вычитание. 20 - 10
* Умножение. 20 * 10
/ Деление. 20 / 10
& Объединение/конкатенация строк. "one" & 10 - ("one10")
^ Возведение в степень. 2 ^ 4

= Проверка равенства значений (для текста НЕ ЗАВИСИТ от регистра написания). Например, выражение If $var= 5 Then оказывается справедливым, если $var равно 5)
== Проверка равенства значений (для текста ЗАВИСИТ от регистра написания)
<> Проверка неравенства значений.
> Проверка того, что первое значение больше второго.
>= Проверка того, что первое значение больше или равно второму.
< Проверка того, что первое значение меньше второго.
<= Проверка того, что первое значение меньше или равно второму.

AND Оператор логического умножения.
OR Оператор логического сложения.
NOT Оператор логического отрицания. Например, NOT 1 (равно нулю)



При использовании в выражении более одного оператора их порядок выполнения продиктован приоритетом оператора. Порядок выполнения операторов (в порядке снижения приоритета) представлен ниже, где операторы, имеющие один и тот же приоритет выполняются слева направо.

Список операторов, упорядоченный по снижению приоритета выглядит следующим образом:

NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR



Пример




2 + 4 * 10 равно 42:

4 * 10 (равно 40)

2 + 40 (равно 42)

Оператор * имеет более высокий приоритет, чем +, поэтому он применяется раньше сложения.



Для отделения частей выражения и явного управления порядком вычисления всегда можно использовать скобки.

Например, (2 + 4) * 10 равно 60.

Отметим следующие особенности реализации логических операторов AND, OR:

При оценке выражения If MyFunc1() OR MyFunc2() Then значение функции MyFunc2() НЕ БУДЕТ вычисляться, если значение MyFunc1() истинно.

При оценке выражения If MyFunc1() AND MyFunc2() Then значение функции MyFunc2() НЕ БУДЕТ вычисляться, если значение MyFunc1() ложно.
Ошибся в коде. Исправил.
Код:
Elseif ;Заменил на
Else



Добавлено:
Сообщение автоматически объединено:

Я тут потестировал и обнаружил баг. В моем и вашем скрипте.
Допустим щас 02.02.2014
Если мы установим дату проверки 01.03.2014 то скрипт закроется.
Таким образом Дни всегда ставить на макс. Или вообще их не проверять.
То же самое но с годом. если поставить дату: 31.01.2015
Скрипт закроется.
Таким образом дата на 2 месяца должна выглядеть примерно так: 31.03.2014
 

Naisho

Знающий
Сообщения
86
Репутация
12
По моему так проще...

Код:
#include <Date.au3>
;
$sTargetDate = "2033/01/06"
;
If _DateDiff( 's',_NowCalcDate(),$sTargetDate) >= 0 Then
	MsgBox(0,"Информация",'Сейчас '&_NowCalcDate()&' и всё работает')
Else
	Exit
EndIf
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
http://autoit-script.ru/index.php/topic,15091.0.html
 
Автор
xishnik

xishnik

Новичок
Сообщения
51
Репутация
0
Я тут потестировал и обнаружил баг. В моем и вашем скрипте.
Допустим щас 02.02.2014
Если мы установим дату проверки 01.03.2014 то скрипт закроется.
Таким образом Дни всегда ставить на макс. Или вообще их не проверять.
То же самое но с годом. если поставить дату: 31.01.2015
Скрипт закроется.
Таким образом дата на 2 месяца должна выглядеть примерно так: 31.03.2014

В моём помоему учтена проверка, сначала проверяется год, если год меньше, то сразу ретурн, если равен, то продолжает.... потом проверка месяца, если меньше то ретурн, если равен, то проверяется день... если меньше или равен, пропускает, если больше то выход.... вроде бы логически всё верно


Добавлено:
Сообщение автоматически объединено:

По моему так проще...

Это проверка даты компьютера с датой в переменной. А обе даты берутся с интернета.

На вопрос зачем? отвечу:
Первая дата это реальное время, вторую программа берёт с сайта, массивом [ID жёсткого диска,год,месяц,день]
программа сначала сравнивает ID жёсткого диска... а потом смотрит на дату.... сравнивает с реальной, если реальная дата меньше, то пишет о том, что программа ещё работает, например до 01.02.2033...
брать дату с компьютера - невыгодно...

Для чего это надо? Чтобы замкнуть программу, в определённый круг людей... которые смогут её запустить, это по моему многим интересно.
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
xishnik
Сравнивай как строки:
Код:
$URL = 'http://time.jp-net.ru/'
$ReadHTML = BinaryToString(InetRead($URL), 4)
$Data = StringRegExp($ReadHTML, '(\d+-\d+-\d+)', 3)
If $Data[0] < '2014-02-02' Then
	ConsoleWrite('<')
ElseIf $Data[0] > '2014-02-02' Then
	ConsoleWrite('>')
Else
	ConsoleWrite('=')
EndIf
 
Верх