Lua语言,两个年份相差的天数

要求计算该日期与1949年10月1日距离多少天

例如:

用户输入了:1949-10-2

程序输出:1

用户输入了:1949-11-1

程序输出:31

总共是写了两个类,然后代码微乱:

YearAndMonth:

require("YearPrint")

local nYear = 1949
local nMonth = 10
local nDay =1

--[[--
--@param #number year 传递过来的参数是年数
--@param #number month 传递过来的参数是月份
--@param #number day 传递过来的参数是日期
--@return #day 返回的是这一年的天数
--]]

local function getDays(year,month,day)
local temp ={31,28,31,30,31,30,31,31,30,31,30,31}
--判断是否是闰年,如果为闰年,改变2月是29,否则改变2月是28
if ((year%4==0 and year%100 ~= 0) or year%400==0) then
temp[2] = 29
else
temp[2] = 28
end
for i = 1,month-1 do
day = day + temp[i];
end
-- 返回的结果是这一年到月份的天数
return day;
end

--[[--
--@param #number year 传递多来的年数
--@return #number 判断年数是否为闰年,如果是闰年,返回366天,反之则返回365天
--]]
local function Days(year)
--判断是否闰年,如果闰年,返回366天,如果不是闰年,返回365天
return ((year%4==0 and year%100 ~=0) or year%400==0) and 366 or 365;
end

--[[--
--@param #number sum 两个年月份相差的天数
--@param #number year 输入的年份
--@param #number month 输入的月份
--@param #number day 输入的日期
--@param #number nYear 初始的年份
--@param #number nMonth 初始的月份
--@param #number nDay 初始的日期
--@return #number sum是两个年份相差的天数
--]]
local function sumDay(year,month,day)
  local sum = 0;
-- 小于nYear年
if year < nYear then
for x = year,nYear - 1 do
-- 传递年数过去,number型
sum = sum + Days(x);
end
-- 传递的是number型
sum = sum + getDays(nYear,nMonth,nDay);
sum = sum - getDays(year,month,day);
elseif year == nYear then
-- 如果是同一年,判断月份的大小,然后去绝对值
sum = math.abs(getDays(year,month,day)-getDays(nYear,nMonth,nDay));
else
-- 大于nYear年
for i = nYear + 1 ,year do
sum = sum + Days(i);
end
sum = sum + getDays(year,month,day);
sum = sum - getDays(nYear,nMonth,nDay);

end
print("相差天数结果:" ..sum);
return sum
end

--[[--
--@param #class YearPrint YMDPrint算是文件加密,PrintYearMonthDay()输入年月日的方法
--@param #table data 本地化的一个数组,并接受了YearPrint累里的数据
--@param #number sum 两个年月份相差的天数
--@param #number year 输入的年份
--@param #number month 输入的月份
--@param #number day 输入的日期
--]]

local function isLeapYear()
    local data = {}
data = YMDPrint.PrintYearMonthDay()

local year = tonumber(data.Year);
local month = tonumber(data.Month);
local day = tonumber(data.Day);
    sumDay(year,month,day)
end

--[[--
--@isLeapYear是计算年月份天数的方法
--]]
function main()
      isLeapYear()
end

main()
第二个类YearPrint:

module("YMDPrint",package.seeall);

-- isFlag初始化等于false,判断年份是否为闰年,如果为闰年则为true,否则为false
local isFlag = false
--[[--
--@param #table adta 存年月日的一个数组
--@param #number data.Year 输入的年份
--@param #number data.Month 输入的月份
--@param #number data.Day 输入的日期
--@return #table data  返回的是一个数组,保存了输入的年月日


--]]
function PrintYearMonthDay()
local data = {};
print("请输入年份(0-9999),然后按回车:")
data.Year = io.read()
if(tonumber(data.Year) ~= nil) then
if (tonumber(data.Year) > 0 and tonumber(data.Year) < 9999) then
if((tonumber(data.Year)%4==0 and tonumber(data.Year)%100 ~=0) or tonumber(data.Year)%400==0) then
isFlag = true
end
print("请输入月份,然后按回车:")
data.Month = io.read()
else
print("输入的年份是1-9999,请重新输入!")
PrintYearMonthDay()
end
else
print("格式错误,请重新输入!")
PrintYearMonthDay()
end
if(tonumber(data.Month) ~= nil) then
if (tonumber(data.Month) > 0 and tonumber(data.Month) < 13) then
print("请输入日期,然后按回车:")
data.Day = io.read()
else
print("输入的月份是1-12月,请重新输入!")
end
if (tonumber(data.Day) > 0 and tonumber(data.Day) < 32) then
if (isFlag == true and tonumber(data.Month) == 2) then
if(tonumber(data.Day) == 29) then
print("日期输入正确!")
else
print("是闰年,应该是29天,输入错误,请重新输入");
PrintYearMonthDay();
end
end


if(not isFlag and tonumber(data.Month) == 2) then
if(tonumber(data.Day) <= 28) then
print("日期输入正确!\n")
else
print("不是闰年2月,应该是28天,不能大于,输入错误,请重新输入:")
PrintYearMonthDay();
end
end
else
   print("输入的日期应在1-31之间!")
   PrintYearMonthDay();
   end
else
      print("格式错误,请重新输入!")
      PrintYearMonthDay()
end
return data;
end

如果有错误,欢迎大家共同讨论

你可能感兴趣的:(lua语言,两个年月份,计算相差的天数)