あなたの仕様は完全に明確ではありません。次のスクリプトが役立つと思います。トリックは、日付を によって返される時間値に変換するos.time
ことです。これは単純な数値として比較できます。
これを行うには、最初に日付の文字列形式を解析してから、 にフィードするのに適したテーブル形式に変換する必要がありますos.time
。これらのテーブル (コンポーネントが分割された日付を表す) のフィールドをインクリメントすると、すでに時間計算が処理されていることに注意してください。day
たとえば、フィールドに の値を指定すると、32
時間値に変換されたときに次の月に正しくラップされます。
目的の日付に到達したら、時間を使用して必要な形式の日付値に変換しますos.date
。
local TARGET_DATE = "03/05/2012"
-- get the two dates from the command line of this lua script
local date1 = arg[1]
local date2 = arg[2]
date1 = "01/01/2012" -- test data - remove in actual script
date2 = "02/01/2012" -- test data - remove in actual script
-- parse the dates (assuming the format day/month/year)
local d1, m1, y1 = string.match( date1, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
local d2, m2, y2 = string.match( date2, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
local td, tm, ty = string.match( TARGET_DATE, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
print( d1, m1, y1 ) -- debug
print( d2, m2, y2 ) -- debug
print( td, tm, ty ) -- debug
date1_tbl = { day = d1, month = m1, year = y1 }
date2_tbl = { day = d2, month = m2, year = y2 }
local time1 = os.time( date1_tbl )
local time2 = os.time( date2_tbl )
local target_time = os.time { day = td, month = tm, year = ty }
-- loop until both dates exceed target date
while time1 < target_time or time2 < target_time do
date1_tbl.day = date1_tbl.day + 14
date2_tbl.day = date2_tbl.day + 14
time1 = os.time( date1_tbl )
time2 = os.time( date2_tbl )
end
-- rebuild new dates
local newdate1 = os.date( "%d/%m/%Y", time1 )
local newdate2 = os.date( "%d/%m/%Y", time2 )
print( newdate1 ) -- debug
print( newdate2 ) -- debug