5

調整したい 2 つの日付値を使用してバッチ スクリプトを実行し、スクリプトを再度実行しようとしています。これらの日付値を調整する lua スクリプトを参照したいと思います。ほとんどのプロジェクトがこの言語でコーディングされているという理由だけで、私は lua を使用しています。

変数が start=01/01/2012 および end=02/01/2012 である場合、これらの日付を両方とも 14 日間進めるにはどうすればよいでしょうか? 次に、それを実行してから、もう一度ループして、両方をさらに 14 日間進めたいと思います。これは、私が決定した日付でループが壊れるまで続きます。この方法でこれを達成することは可能ですか、それとも間違っていますか?

日付から「dd」を取り出して14上に移動する関数を使用して、string.gsubに関連する何かを実行できると思います。 2012 年 1 月 45 日のような日付を読み取ろうとしますか?

4

2 に答える 2

3

あなたの仕様は完全に明確ではありません。次のスクリプトが役立つと思います。トリックは、日付を によって返される時間値に変換する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
于 2013-11-04T20:26:59.367 に答える
0

解析にはstring.matchを使用し、正しい新しい時刻文字列を作成するにはos.timeos.dateを使用することをお勧めします (os.time を使用して、新しく追加された日付を正しい月/年に変換し、os.date を使用してos.time によって人間にわかりやすい文字列/テーブルに返された時刻) を使用して、日付チェックのループ/停止を行います。

于 2013-11-04T20:16:44.557 に答える