Вы можете использовать алгоритмы собраны здесь:
chrono-Compatible Low-Level Date Algorithms
алгоритмы показаны с помощью C++, но они могут быть легко реализованы в Lua, если вам нравится, или вы можете реализовать их в C или C++ и то просто обеспечьте привязки Lua.
Основная идея, использующая эти алгоритмы, состоит в том, чтобы вычислить номер дня для двух дат, а затем просто вычесть их, чтобы дать вам количество дней.
--[[
http://howardhinnant.github.io/date_algorithms.html
Returns number of days since civil 1970-01-01. Negative values indicate
days prior to 1970-01-01.
Preconditions: y-m-d represents a date in the civil (Gregorian) calendar
m is in [1, 12]
d is in [1, last_day_of_month(y, m)]
y is "approximately" in
[numeric_limits<Int>::min()/366, numeric_limits<Int>::max()/366]
Exact range of validity is:
[civil_from_days(numeric_limits<Int>::min()),
civil_from_days(numeric_limits<Int>::max()-719468)]
]]
function days_from_civil(y, m, d)
if m <= 2 then
y = y - 1
m = m + 9
else
m = m - 3
end
local era = math.floor(y/400)
local yoe = y - era * 400 -- [0, 399]
local doy = math.modf((153*m + 2)/5) + d-1 -- [0, 365]
local doe = yoe * 365 + math.modf(yoe/4) - math.modf(yoe/100) + doy -- [0, 146096]
return era * 146097 + doe - 719468
end
local reference_date = {year=2001, month = 1, day = 1}
local date = os.date("*t")
local reference_days = days_from_civil(reference_date.year, reference_date.month, reference_date.day)
local days = days_from_civil(date.year, date.month, date.day)
print(string.format("Today is %d days into the 21st century.",days-reference_days))
что вы имеете в виду под " дни между "? количество дней или таблиц, представляющих даты? – ryanpattison
привет, количество дней, спасибо. – LFS