Арифметика времени
Складывайте и сравнивайте моменты времени.
«Арифметика времени» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Время — это просто числа
Поскольку os.time возвращает обычное количество секунд, вычисления с датами в основном сводятся к обычной арифметике. Прибавляйте секунды, чтобы переместиться вперёд, и вычитайте их, чтобы вернуться назад.
В этом уроке показано, как сдвигать время, сравнивать моменты и находить промежуток между ними.
Секунды в минуте, часе и дне
Чтобы работать с более крупными единицами, запомните основные значения: 60 секунд в минуте, 3600 в часе и 86400 в дне.
Умножение на эти постоянные значения позволяет выразить любую продолжительность в секундах.
print("Minute:", 60)
print("Hour:", 60 * 60)
print("Day:", 24 * 60 * 60)Через один час
Чтобы получить время через один час, возьмите os.time() и добавьте 3600 секунд.
Передайте новое число в os.date, чтобы увидеть результат в виде понятного текста.
local now = os.time()
local later = now + 3600
print(os.date("%H:%M", now))
print(os.date("%H:%M", later))Вчера и завтра
Добавьте 86400 секунд, чтобы перейти на день вперёд, или вычтите их, чтобы вернуться на день назад.
Это быстрый способ вычислить дату завтра или вчера, не беспокоясь о границах месяцев.
local now = os.time()
print("Yesterday:", os.date("%Y-%m-%d", now - 86400))
print("Tomorrow: ", os.date("%Y-%m-%d", now + 86400))Создание конкретной даты
Начните вычисления с фиксированной даты, создав её с помощью таблицы. Здесь мы создаём Новый год — 1 января 2025 года — а затем добавляем неделю.
Добавленное время правильно переносит дату на 8 января.
local start = os.time({year=2025, month=1, day=1})
local week = start + 7 * 86400
print(os.date("%Y-%m-%d", week))Сравнение двух моментов
Поскольку время представлено числами, работают обычные операторы сравнения. Большее число означает более поздний момент.
Так легко проверить, прошёл ли крайний срок.
local deadline = os.time({year=2020, month=1, day=1})
local now = os.time()
if now > deadline then
print("Deadline has passed")
endРазница в секундах
Вычитание одного времени из другого даёт промежуток в секундах. В Lua также есть функция os.difftime(a, b), которая возвращает a - b как число.
Использование os.difftime — переносимый и рекомендуемый способ найти временной интервал.
local a = os.time({year=2025, month=1, day=2})
local b = os.time({year=2025, month=1, day=1})
print(os.difftime(a, b))Преобразование секунд в дни
Необработанный интервал в секундах велик, поэтому разделите его, чтобы получить более удобные единицы. Делите на 86400, чтобы получить дни, или на 3600 — часы.
Используйте math.floor, чтобы отбросить дробную часть, если нужны только целые единицы.
local diff = os.difftime(
os.time({year=2025, month=1, day=11}),
os.time({year=2025, month=1, day=1}))
print(diff / 86400, "days")Дни до события
Объедините эти идеи, чтобы вести отсчёт до будущей даты. Вычтите текущий момент из целевого, затем преобразуйте секунды в целое число дней.
Этот шаблон лежит в основе таймеров обратного отсчёта и приложений-напоминаний.
local target = os.time({year=2030, month=1, day=1})
local secs = os.difftime(target, os.time())
local days = math.floor(secs / 86400)
print("Days left:", days)Нормализация с помощью os.time
Вот полезный приём: передайте os.time таблицу с полем, значение которого выходит за допустимый диапазон, и Lua его исправит. 32-й день января превратится в 1 февраля.
Благодаря этому можно добавлять дни, просто увеличивая поле day, а Lua сама корректно обработает календарь.
local t = os.time({year=2025, month=1, day=32})
print(os.date("%Y-%m-%d", t))Безопасное добавление месяца
Благодаря нормализации можно увеличить поле month так, чтобы оно превысило 12, и Lua перенесёт год вперёд.
Месяц 13 2025 года автоматически превратится в январь 2026 года.
local t = os.time({year=2025, month=13, day=1})
print(os.date("%Y-%m-%d", t))Быстрая проверка
Примените свои знания об арифметике времени.
Повторение
Значения времени — это числа, поэтому для их смещения складывайте или вычитайте секунды: 3600 секунд в часе и 86400 секунд в сутках. Сравнивайте моменты времени напрямую с помощью > и <.
Используйте os.difftime, чтобы получить интервал между двумя моментами времени, затем разделите его, чтобы получить часы или дни. И помните: os.time нормализует значения полей таблицы, выходящие за допустимый диапазон, благодаря чему вычисления с календарём становятся простыми.
Часто задаваемые вопросы
Урок «Арифметика времени» бесплатный?
Да — полный текст урока «Арифметика времени» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Арифметика времени»?
Складывайте и сравнивайте моменты времени. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Арифметика времени»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- os.time и os.date
- Форматирование дат
- Арифметика времени
- Измерение длительности