-- টেমপ্লেট:সময় আগের জন্য  local convertbn = require('মডিউল:সংখ্যা রূপান্তরকারী').convert local numberSpell, yesno  -- lazy load  function numberSpell(arg) 	numberSpell = require('Module:NumberSpell')._main 	return numberSpell(arg) end  function yesno(arg) 	yesno = require('Module:Yesno') 	return yesno(arg) end  local p = {}  -- Table to convert entered text values to numeric values. local timeText = { 	['সেকেন্ড'] = 1, 	['মিনিট'] = 60, 	['ঘণ্টা'] = 3600, 	['দিন'] = 86400, 	['সপ্তাহ'] = 604800, 	['মাস'] = 2629800, 	['বছর'] = 31557600, 	['seconds'] = 1, 	['minutes'] = 60, 	['hours'] = 3600, 	['days'] = 86400, 	['weeks'] = 604800, 	['months'] = 2629800,  -- 365.25 * 24 * 60 * 60 / 12 	['years'] = 31557600 }  -- Table containing tables of possible units to use in output. local timeUnits = { 	[1] = { 'সেকেন্ড', 'সেকেন্ড', "সেকেন্ড", "সেকেন্ড" }, 	[60] = { 'মিনিট', 'মিনিট', "মিনিট", "মিনিট" }, 	[3600] = { 'ঘণ্টা', 'ঘণ্টা', "ঘণ্টা", "ঘণ্টা" }, 	[86400] = { 'দিন', 'দিন', "দিন", "দিন" }, 	[604800] = { 'সপ্তাহ', 'সপ্তাহ', "সপ্তাহ", "সপ্তাহ", unit = 'w' }, 	[2629800] = { 'মাস', 'মাস', "মাস", "মাস", unit = 'm' }, 	[31557600] = { 'বছর', 'বছর', "বছর", "বছর", unit = 'y' } }  function p._main( args ) 	-- Initialize variables 	local lang = mw.language.getContentLanguage() 	local auto_magnitude_num 	local min_magnitude_num 	local magnitude = args.magnitude 	local min_magnitude = args.min_magnitude 	local purge = args.purge  	-- Add a purge link if something (usually "yes") is entered into the purge parameter 	if purge then 		purge = ' ([' .. mw.title.getCurrentTitle():fullUrl('action=purge') .. ' শোধন])' 	else 		purge = 	end  	-- Check that the entered timestamp is valid. If it isn't, then give an error message. 	local success, inputTime = pcall( lang.formatDate, lang, 'xnU', args[1] ) 	if not success then 		return 'ত্রুটি: প্রথম প্যারামিটার একটি তারিখ বা সময় হিসেবে পার্স করা যাবে না।' 	end  	-- Store the difference between the current time and the inputted time, as well as its absolute value. 	local timeDiff = lang:formatDate( 'xnU' ) - inputTime 	local absTimeDiff = math.abs( timeDiff )  	if magnitude then 		auto_magnitude_num = 0 		min_magnitude_num = timeText[magnitude] 	else 		-- Calculate the appropriate unit of time if it was not specified as an argument. 		local autoMagnitudeData = { 			{ factor = 2, amn = 31557600 }, 			{ factor = 2, amn = 2629800 }, 			{ factor = 2, amn = 86400 }, 			{ factor = 2, amn = 3600 }, 			{ factor = 2, amn = 60 } 		} 		for _, t in ipairs( autoMagnitudeData ) do 			if absTimeDiff / t.amn >= t.factor then 				auto_magnitude_num = t.amn 				break 			end 		end 		auto_magnitude_num = auto_magnitude_num or 1 		if min_magnitude then 			min_magnitude_num = timeText[min_magnitude] 		else 			min_magnitude_num = -1 		end 	end  	if not min_magnitude_num then 		-- Default to seconds if an invalid magnitude is entered. 		min_magnitude_num = 1 	end  	local result_num 	local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num ) 	local unit = timeUnits[magnitude_num].unit 	if unit and absTimeDiff >= 864000 then 		local Date = require('মডিউল:তারিখ')._Date 		local input = lang:formatDate('Y-m-d H:i:s', args[1])  -- Date needs a clean date 		input = Date(input) 		if input then 			local id 			if input.hour == 0 and input.minute == 0 then 				id = 'currentdate' 			else 				id = 'currentdatetime' 			end 			result_num = (Date(id) - input):age(unit) 		end 	end 	result_num = result_num or math.floor ( absTimeDiff / magnitude_num )  	local punctuation_key, suffix 	if timeDiff >= 0 then -- Past 		if result_num == 1 then 			punctuation_key = 1 		else 			punctuation_key = 2 		end 		if args.ago ==  then 			suffix = 		else 			suffix = ' ' .. (args.ago or 'আগে') 		end 	else -- Future 		if args.ago ==  then 			suffix = 			if result_num == 1 then 				punctuation_key = 1 			else 				punctuation_key = 2 			end 		else 			suffix = ' সময়' 			if result_num == 1 then 				punctuation_key = 3 			else 				punctuation_key = 4 			end 		end 	end 	local result_unit = timeUnits[ magnitude_num ][ punctuation_key ]  	-- Convert numerals to words if appropriate. 	local spell_out = args.spellout 	local spell_out_max = tonumber(args.spelloutmax) 	local result_num_text 	if spell_out and ( 		( spell_out == 'auto' and 1 <= result_num and result_num <= 9 and result_num <= ( spell_out_max or 9 ) ) or 		( yesno( spell_out ) and 1 <= result_num and result_num <= 100 and result_num <= ( spell_out_max or 100 ) ) 		) 	then 		result_num_text = numberSpell( result_num ) 	else 		result_num_text = tostring( result_num ) 	end  	local result = convertbn('bn',result_num_text) .. ' ' .. result_unit .. suffix -- Spaces for suffix have been added in earlier. 	return result .. purge end  function p.main( frame ) 	local args = require( 'Module:Arguments' ).getArgs( frame, { 		valueFunc = function( k, v ) 			if v then 				v = v:match( '^%s*(.-)%s*$' ) -- Trim whitespace. 				if k == 'আগে' or v ~=  then 					return v 				end 			end 			return nil 		end, 		wrappers = 'টেমপ্লেট:সময় আগে' 	}) 	return p._main( args ) end  return p