Написание подпрограммы для вычисления датыПример создания пользовательских подпрограмм и их подключения через директиву includeОригинальный пост пользователя Сергей:
http://clickermann.tk/forum/index.php?topic=36.msg373#msg373Данный пример раскрывает возможность "прятать от глаз" большой громоздкий код в программные библиотеки.
Имеется задача: вычислить текущую дату на основании системной переменной $_time_t
Для этого была написана следующая подпрограмма, для удобства вынесенная в отдельный файл date.cms
date.cms// Day, Month, Year from $_time_t
// Author: Sergey
// Version: 1.0 (30.10.2012)
SUB(UPDATE_DATE)
$_date_y = 1970
$_date_m = 1
$_date_d = ROUND(($_time_t / (3600 * 24)) - $voi, 0) + 1//floor
$voi = 0.499999999999
$break = 0
WHILE($break = 0)
$arg1 = $_date_y-1968
$arg2 = 4
IF($arg1-(ROUND(($arg1/$arg2)-$voi,0)*$arg2) = 0)//mod($_date_y-1968, 4) = 0
$nd = 366
ELSE
$nd = 365
END_IF
if($_date_d > $nd)
INC($_date_d, 0-$nd)
INC($_date_y, 1)
ELSE
$break = 1
END_IF
END_CYC
$break = 0
WHILE($break = 0)
$arg1 = $_date_y-1968
$arg2 = 4
IF( ($arg1-(ROUND(($arg1/$arg2)-$voi,0)*$arg2) = 0) & ($_date_m = 2) )//(mod($_date_y-1968, 4) = 0) & ($_date_m = 2)
$nd = 29
ELSE
$nd = STRCUT("31,28,31,30,31,30,31,31,30,31,30,31", (($_date_m-1) * 3) + 1, 2)
END_IF
IF($_date_d > $nd)
INC($_date_d, 0-$nd)
INC($_date_m, 1)
ELSE
$break = 1
END_IF
END_CYC
END_SUB
GOSUB(UPDATE_DATE)
После вызова эта подпрограмма создает следующие переменные, которые могут использоваться в вашей программе
- $_date_d - День
- $_date_m - Месяц
- $_date_y - Год
Пример использования подпрограммы// Подключаем файл, содержащий подпрограмму UPDATE_DATE, это работает так же, как если бы вы просто скопировали все содержимое файла date.cms за место этой строчки
#include "date.cms"
print($_date_d,".",$_date_m,".",$_date_y) // Выводим "старую" дату
GOSUB(UPDATE_DATE) // Вызов подпрограммы (напоминаю что ее "тело" находится в подключенном файле date.cms), обновление переменных
print($_date_d,".",$_date_m,".",$_date_y) // Выводим актуальную дату
HALT
Этот пример вы можете скачать из вложения
Ах да, скрипт не будет работать если вы изобрели машину времени и переместились раньше 1970 года.
Отдельное спасибо Ляпису за идею с обходом отсутствия массивов.