当前位置 : 主页 > 网络编程 > lua >

循环 – Lua Date Manipulation Loop

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在尝试运行一个包含两个日期值的批处理脚本,我想调整它然后让脚本再次运行.我想引用一个lua脚本来为我调整这些日期值.我使用lua只是因为大部分项目都是用这种语言编写的. 如
我正在尝试运行一个包含两个日期值的批处理脚本,我想调整它然后让脚本再次运行.我想引用一个lua脚本来为我调整这些日期值.我使用lua只是因为大部分项目都是用这种语言编写的.

如果我的变量是start = 01/01/2012和end = 02/01/2012,我怎么能将这两个日期提前14天?然后我想让它运行,然后再次循环并向前移动另外14天.这将继续,直到循环中断我决定的日期.是否有可能以这种方式实现这一点,还是我接近这个错误?

我想我可以做一些涉及string.gsub的函数,它会从我的日期中拉出“dd”并将其向上移动14.然而,是否有可能进行这种日期算术或者当我达到这个时就会中断月底它会尝试读取像01/45/2012这样的日期吗?

您的规格并不完全清楚.我想以下脚本可能会有所帮助.
诀窍是将日期转换为时间值,由 os.time返回,可以作为简单数字进行比较.

要做到这一点,首先必须解析日期的字符串形式,然后将它们转换为适合提供给os.time的表格形式.请注意,递增这些表的字段(表示其组件已拆分的日期)已经处理时间算术,即指定值为例如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
网友评论