0Pricing
Lua Academy · Урок

Арифметика времени

Складывайте и сравнивайте моменты времени.

«Арифметика времени» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. os.time и os.date
  2. Форматирование дат
  3. Арифметика времени
  4. Измерение длительности
← Назад к Lua Academy