首先输入要求的是多少年,然后再输入各个年,再求每个年两两之间相差的天数,lua语言:
总共是两个类
第一个是:

require("YearPrint")
 --require("StartPrintYearMonthDay")
 --1、输入方法:a、输入;b、数据存储;c、输入结束
 --2、判断闰年
 --3、判断输入日期是否正确:a,年份是否正确;b,月份是否正确;c,判断日期是否正确
 --4、计算日期差:a,整年计算;b,非整年计算




 monthDays ={31,28,31,30,31,30,31,31,30,31,30,31} --初始化12个月,每个月的天数
 local dateTable = {} --本地化的一个数组,并接受了YearPrint累里的数据


 --[[--
 --输入有多少个年份,分别计算两两之间相差的天数
 --@return #number 返回输入的年份
 --]]
 local function inPutCountYear()
print("\n请输入想要多少个年份进行比较,然后按回车:")
local inPutYear = io.read();
local countYear = tonumber(inPutYear)
if countYear == nil or countYear <= 1 then
print("格式错误,请重新输入!")
countYear = inPutCountYear()
end
return countYear
 end
 --[[--
 --获取输入的第一个日期
 --@param #number index 标示当先输入的是第几个数据
 --]]
 local function inPutDate(index)
print("请输入第 ".. index .." 个日期:");
dateTable[index] = {}
dateTable[index] = YMDPrint.getDate()
dateTable[index].Year = tonumber(dateTable[index].Year);
dateTable[index].Month = tonumber(dateTable[index].Month);
dateTable[index].Day = tonumber(dateTable[index].Day);
print("输入的第"..index.."个数据已存储================")
 end
 --[[--
 --判断是否是闰年
 --@param #number Year 年份
 --@return #boolean true 是闰年,false 不是
 --]]
 function isleapYear(Year)
return (tonumber(Year)%4==0 and tonumber(Year)%100 ~=0) or tonumber(Year)%400==0;
 end


 --[[--
 --计算本年已经过了多少天
 --@param #number year 传递过来的参数是年数
 --@param #number month 传递过来的参数是月份
 --@param #number day 传递过来的参数是日期
 --@return #day 返回的是这一年的天数
 --]]
 local function getDays(year,month,day)
--判断是否是闰年,如果为闰年,改变2月是29,否则改变2月是28
if ((year%4==0 and year%100 ~= 0) or year%400==0) then
monthDays[2] = 29
else
monthDays[2] = 28
end
for i = 1,month-1 do
day = day + monthDays[i];
end
-- 返回的结果是这一年到月份的天数
return day;
 end


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


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


end
return sum
 end


 --[[--
 --计算日期差
 --@param #type name description
 --@param #type name description
 --]]
 local function getDateDif(dateTableOne, dateTableTwo)
print("第一个日期为:")
print(dateTableOne["Year"].."-"..dateTableOne["Month"].."-"..dateTableOne["Day"])
print("第二个日期为:")
print(dateTableTwo.Year.."-"..dateTableTwo.Month.."-"..dateTableTwo.Day)
local num = sumDay(dateTableOne, dateTableTwo)
print("相差天数为:" .. num .. "\n");
 end


 --[[--
 --计算两两之间相差的天数
 --]]
 local function countDate(dateMaxNum)
local count = 0
for i = 1, dateMaxNum do
for j =  i + 1, dateMaxNum do
getDateDif(dateTable[i], dateTable[j])
count = count + 1
end
end
print("\n总的组合为 :" ..count)
 end


 --[[--
 --结果输出
 --]]
 function main()
local dateMaxNum = inPutCountYear()
while #dateTable < dateMaxNum do
inPutDate(#dateTable + 1);
end
countDate(dateMaxNum)
 end

 main()


 第二个类:module("YMDPrint",package.seeall);


 --[[--
 --判断年份是否合法
 --@param #number year 年份
 --@return #boolean 如果为true,年份合法,如果为false,不合法
 --]]
 local function logicYear(year)
local isTrue = true;
if tonumber(year) == nil or tonumber(year) < 0 or tonumber(year) > 9999 then
isTrue = false;
end
return isTrue;
 end


 --[[--
 --判断月份是否合法
 --@param #number month 月份
 --@return #boolean 如果为true,月份合法,如果为false,不合法
 --]]
 local function logicMonth(month)
local isTrue = true;
if tonumber(month) == nil or tonumber(month) < 0 or tonumber(month) > 12 then
isTrue = false;
end
return isTrue;
 end


 --[[--
 --判断日期是否合法
 --@param #number year 年份
 --@param #number month 月份
 --@param #number day 日期
 --@return #boolean 如果为true,月份合法,如果为false,不合法
 --]]
 local function logicDay(year, month, day)
local isTrue = true;
if tonumber(year) == nil or tonumber(month) == nil or tonumber(day) == nil then
isTrue = false;
return isTrue;
end


if isleapYear(year) then
--是闰年
monthDays[2] = 29
else
--不是闰年
monthDays[2] = 28
end


if monthDays[tonumber(month)] < tonumber(day) then
isTrue = false;
end


return isTrue;
 end


 --[[--
 --输入年份
 --@return #number 返回输入的年份
 --]]
 local function inPutYear()
print("请输入年份(0-9999),然后按回车:")
local year = io.read()
return year;
 end


 --[[--
 ----输入月份
 --@return #number 返回输入的月份
 --]]
 local function inPutMonth()
print("请输入月份,然后按回车:")
local month = io.read()
return month;
 end


 --[[--
 ----输入日期
 --@return #day 返回输入的日期
 --]]


 local function inPutDay()
print("请输入日期,然后按回车:")
local day = io.read()
return day;
 end


 --[[--
 --判断输入日期是否合法
 --]]
 local function printDayLogic(Year, Month)
local Day = inPutDay();
-- 判断输入的年份是否合法
if logicDay(Year, Month, Day) then
print("输入成功!")
print("=======================")
else
print("日期格式错误,请重新输入!")
Day = printDayLogic(Year, Month);
end
return Day;
 end


 --[[--
 --判断输入月份是否合法
 --]]
 local function printMonthLogic()
local Month = inPutMonth();
-- 判断输入的年份是否合法
if not logicMonth(Month) then
print("月份格式错误,请重新输入!")
Month = printMonthLogic();
end
return Month;
 end


 --[[--
 --输入年月日
 --]]
 local function printYearLogic()
local Year = inPutYear();
-- 判断输入的年份是否合法
if not logicYear(Year) then
print("年份格式错误,请重新输入!")
Year = printYearLogic();
end
return Year;
 end


 function getDate()
local data = {};--data.Year 输入的年份;data.Month 输入的月份;data.Day 输入的日期
-- data是保存输入的年月日
data.Year = printYearLogic();
data.Month = printMonthLogic();
data.Day = printDayLogic(data.Year, data.Month);
return data;
 end


 如果输入的年数是3个年份然后输入的是2014-7-1,2014-7-2,2014-7-4
得出的结果是2014-7-1,2014-7-2,相差1天
2014-7-1,2014-7-4,相差3天
2014-7-2,2014-7-4,相差2天

组合为:3