Editing Module:Date
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 897: | Line 897: | ||
end | end | ||
return date, options | return date, options | ||
end | end | ||
Line 1,188: | Line 1,160: | ||
options = {}, | options = {}, | ||
list = _date_list, | list = _date_list, | ||
text = _date_text, | text = _date_text, | ||
} | } | ||
Line 1,360: | Line 1,329: | ||
local function choose(v) | local function choose(v) | ||
if type(v) == 'table' then | if type(v) == 'table' then | ||
if not wantrange | if not wantrange then | ||
-- Example: Date('partial', 2005) - Date('partial', 2001) gives | -- Example: Date('partial', 2005) - Date('partial', 2001) gives | ||
-- diff.years = { 3, 4 } to show the range of possible results. | -- diff.years = { 3, 4 } to show the range of possible results. | ||
Line 1,381: | Line 1,350: | ||
if code == 'y' then | if code == 'y' then | ||
return choose(diff.partial.years) | return choose(diff.partial.years) | ||
end | end | ||
return nil | return nil | ||
Line 1,401: | Line 1,367: | ||
end | end | ||
local H, M, S = diff.hours, diff.minutes, diff.seconds | local H, M, S = diff.hours, diff.minutes, diff.seconds | ||
if code == 'dh' or code == 'dhm' or code == 'dhms' or code == 'h' or code == 'hm' or code == 'hms | if code == 'dh' or code == 'dhm' or code == 'dhms' or code == 'h' or code == 'hm' or code == 'hms' then | ||
local days = floor(diff.age_days + extra_days) | local days = floor(diff.age_days + extra_days) | ||
local inc_hour | local inc_hour | ||
Line 1,416: | Line 1,382: | ||
inc_hour = true | inc_hour = true | ||
end | end | ||
end | end | ||
else | else | ||
Line 1,446: | Line 1,408: | ||
elseif code == 'hm' then | elseif code == 'hm' then | ||
return hours, M | return hours, M | ||
end | end | ||
return hours, M, S | return hours, M, S | ||
Line 1,579: | Line 1,535: | ||
} | } | ||
function DateDiff(date1, date2 | function DateDiff(date1, date2) -- for forward declaration above | ||
-- Return a table with the difference between two dates (date1 - date2). | -- Return a table with the difference between two dates (date1 - date2). | ||
-- The difference is negative if date1 is older than date2. | -- The difference is negative if date1 is older than date2. | ||
Line 1,594: | Line 1,550: | ||
if not (is_date(date1) and is_date(date2) and date1.calendar == date2.calendar) then | if not (is_date(date1) and is_date(date2) and date1.calendar == date2.calendar) then | ||
return | return | ||
end | end | ||
local isnegative = false | local isnegative = false | ||
Line 1,616: | Line 1,568: | ||
-------------A===B------------------------- A=2001-04-01 B=2001-04-30 | -------------A===B------------------------- A=2001-04-01 B=2001-04-30 | ||
--------C=====================D------------ C=2001-01-01 D=2001-12-31 | --------C=====================D------------ C=2001-01-01 D=2001-12-31 | ||
local function zdiff(date1, date2) | |||
local diff = date1 - date2 | |||
if diff.isnegative then | |||
return { years = 0, months = 0 } | |||
return | |||
end | end | ||
local function getdate(date, which) | return diff | ||
end | |||
local function getdate(date, which) | |||
return date.partial and date.partial[which] or date | |||
end | |||
local maxdiff = zdiff(getdate(date1, 'last'), getdate(date2, 'first')) | |||
local mindiff = zdiff(getdate(date1, 'first'), getdate(date2, 'last')) | |||
local years, months | |||
if maxdiff.years == mindiff.years then | |||
years = maxdiff.years | |||
if maxdiff.months == mindiff.months then | |||
months = maxdiff.months | |||
else | else | ||
months = { mindiff.months, maxdiff.months } | |||
end | end | ||
else | |||
years = { mindiff.years, maxdiff.years } | |||
end | end | ||
return setmetatable({ | |||
date1 = date1, | |||
date2 = date2, | |||
partial = { years = years, months = months }, | |||
isnegative = isnegative, | |||
iszero = iszero, | |||
age = _diff_age, | |||
duration = _diff_duration, | |||
}, diffmt) | |||
end | end | ||
local y1, m1 = date1.year, date1.month | local y1, m1 = date1.year, date1.month |