0Pricing
Lua Academy · レッスン

時間の算術演算

時刻を加算して比較します。

「時間の算術演算」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

時刻は単なる数値

os.time は単純な秒数を返すため、日付計算のほとんどは通常の算術演算で行えます。先に進むには秒数を足し、過去に戻るには引きます。

このレッスンでは、時刻のずらし方、比較方法、2つの時点の間隔の求め方を学びます。

1分、1時間、1日の秒数

大きな単位で扱うには、基本的な数を覚えておきましょう。1分は60秒、1時間は3600秒、1日は86400秒です。

これらの定数を掛けると、任意の期間を秒数で表せます。

print("Minute:", 60)
print("Hour:", 60 * 60)
print("Day:", 24 * 60 * 60)

1時間後

現在から1時間後の時刻を得るには、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秒を加えると1日先に進み、引くと1日前に戻ります。

これは、月の境界を気にせずに明日や昨日の日付を計算する簡単な方法です。

local now = os.time()
print("Yesterday:", os.date("%Y-%m-%d", now - 86400))
print("Tomorrow: ", os.date("%Y-%m-%d", now + 86400))

特定の日付を作成する

テーブルを使って固定した日付を作成すると、そこから計算を始められます。ここでは 2025年の元日を作成し、そこに1週間を加えます。

加えた時間によって、正しく1月8日になります。

local start = os.time({year=2025, month=1, day=1})
local week = start + 7 * 86400
print(os.date("%Y-%m-%d", week))

2つの時刻を比較する

時刻は数値なので、通常の比較演算子を使えます。大きい数値ほど後の時点を表します。

これにより、期限を過ぎたかどうかを簡単に確認できます。

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に渡すと、自動的に正しい値へ修正されます。1月32日は2月1日になります。

これにより、dayフィールドを単純に増やすだけで日数を加算でき、カレンダーの処理はLuaに任せられます。

local t = os.time({year=2025, month=1, day=32})
print(os.date("%Y-%m-%d", t))

月を安全に加算する

正規化されるため、monthフィールドを12より大きくしても、Luaが自動的に翌年へ繰り上げます。

2025年の13月は、自動的に2026年1月になります。

local t = os.time({year=2025, month=13, day=1})
print(os.date("%Y-%m-%d", t))

確認問題

時間計算の知識を応用してみましょう。

まとめ

時刻は数値なので、秒数を加算または減算してずらせます。1時間は3600秒、1日は86400秒です。>や<を使えば、時刻を直接比較できます。

2つの時刻の差にはos.difftimeを使い、その結果を割って時間や日数を求めます。また、os.timeはテーブルの範囲外のフィールドを正規化するため、カレンダー計算を簡単に行えることも覚えておきましょう。

よくある質問

「時間の算術演算」レッスンは無料ですか?

はい。「時間の算術演算」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「時間の算術演算」で何を学びますか?

時刻を加算して比較します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「時間の算術演算」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. os.timeとos.date
  2. 日付をフォーマットする
  3. 時間の算術演算
  4. 期間を測定する
← Lua Academyに戻る