Module:Time

From Melvor Idle
Revision as of 19:42, 13 April 2024 by Ricewind (talk | contribs) (Remove unused functions)

Provides time helper functions that can be used elsewhere in the wiki


local p = {}

local Number = require('Module:Number')
local StringBuilder = require('Module:StringBuilder')

function p._secondsToHMS(totalSeconds)
	local days = math.floor(totalSeconds / (24 * 60 * 60))
	if days >= 1 then
		return string.format('%d day%s, ', days, (days > 1) and "s" or "") .. os.date("!%X", totalSeconds)
	else
		return os.date("!%X", totalSeconds)
	end
end

function p._secondsToHuman(totalSeconds)
	ts = Number.secondsToTimeSpan(totalSeconds)
	if ts.totalSeconds < 60 then
		if math.floor(ts.totalSeconds) == 0 then
			return string.format('0 seconds')
		else
			return string.format('%.1f seconds', ts.totalSeconds)
		end
	end
	local output = {}
	if ts.days > 0 then
		table.insert(output, string.format('%d day%s', ts.days, (ts.days > 1) and "s" or ""))
	end
	if ts.hours > 0 then
		table.insert(output, string.format('%d hour%s', ts.hours, (ts.hours > 1) and "s" or ""))
	end
	if ts.minutes > 0 then
		table.insert(output, string.format('%d minute%s', ts.minutes, (ts.minutes > 1) and "s" or ""))
	end
	if ts.seconds > 0 then
		table.insert(output, string.format('%d second%s', ts.seconds, (ts.seconds > 1) and "s" or ""))
	end
	return table.concat(output, ", ")
end

function p.secondsToHuman(frame)
	local frame = frame or mw.getCurrentFrame()
	local args = frame:getParent().args
	return p._secondsToHuman(args[0])
end

return p