Sari la conținut

Modul:BirthDateAndAge

De la Wikipedia, enciclopedia liberă

Documentația acestui modul poate fi creată la Modul:BirthDateAndAge/doc

local p = {}
local getArgs = require('Modul:Arguments').getArgs
local wikidata = require('Modul:Wikidata')
local plural = require('Modul:Plural').get_plural
local GregorianDate = require('Modul:GregorianDate')

local computeYearsPastBetween = function(inMomentDate, inReferenceDate)
	local momentDate = GregorianDate.julianToGregorian(inMomentDate)
	local referenceDate = GregorianDate.julianToGregorian(inReferenceDate)
	local yearsDiff = tonumber(momentDate.year) - tonumber(referenceDate.year)
	if tonumber(momentDate.month) < tonumber(referenceDate.month) or (tonumber(momentDate.month) == tonumber(referenceDate.month) and tonumber(momentDate.day) < tonumber(referenceDate.day)) then
		yearsDiff = yearsDiff - 1
	end
	return yearsDiff
end

local computeYearsPastSince = function(referenceDate) 
	return computeYearsPastBetween(os.date("*t"), referenceDate)
end

p._getBdaByWikidata = function(args) 
	local link = false
	if args['link'] and mw.text.trim(args['link']) ~= '' then
		link = true
	end
	local birthDates = wikidata.findDateValues('P569', args.q)
	local deathDates = wikidata.findDateValues('P570', args.q)
	if birthDates and birthDates[1] and birthDates[1].claim and birthDates[1].claim.type == 'statement' and birthDates[1].claim.mainsnak.snaktype == 'value' then
		local out = GregorianDate.displayDualDateIfInInterval(birthDates[1], link)
		if not deathDates or not deathDates[1] or (deathDates[1].claim and deathDates[1].claim.mainsnak.snaktype == 'novalue') then
			age = computeYearsPastSince(birthDates[1])
			if age < 120 and birthDates[1].precision > 7 then
				out = out .. ' (' .. plural{args={age, 'an', 'ani', 'de ani'}} .. ')'
			else
				out = out .. '[[Categorie:Decese cu dată necunoscută]]'
			end
		end
		if birthDates[1].claim then
			out = out .. wikidata.outputReferences(birthDates[1].claim)
		end
		return out
	end
	return ''
end

p.getBdaByWikidata = function(frame) 
	local args = getArgs(frame)
	return p._getBdaByWikidata(args)
end

p.getBda = function(frame) 
	local args = getArgs(frame)
	local link = false
	if args['link'] and mw.text.trim(args['link']) ~= '' then
		link = true
	end
	local d = {}
	if args[1] then
		d.year = tonumber(args[1])
		d.month = tonumber(args[2] or '1')
		d.day = tonumber(args[3] or '1')
		d.precision = 9
		d.calendar = mw.ustring.lower(args['calendar_birth'] or args['calendar'] or 'gregorian')
		if args[2] then d.precision = 10 end
		if args[3] then d.precision = 11 end
		out = GregorianDate.displayDualDateIfInInterval(d, link)
		if d.precision > 7 then
			out = out .. ' (' .. plural{args={computeYearsPastSince(d), 'an', 'ani', 'de ani'}} .. ')'
		end
		return  out
	else
		return p.getBdaByWikidata(frame)
	end
end

p._getDdaByWikidata = function(args) 
	local birthDates = wikidata.findDateValues('P569', nil)
	local deathDates = wikidata.findDateValues('P570', nil)
	local link = false
	if args['link'] and mw.text.trim(args['link']) ~= '' then
		link = true
	end
	if deathDates and deathDates[1] and (not deathDates[1].claim or deathDates[1].claim.mainsnak.snaktype == 'value') then
		local out = ''
		out = out .. GregorianDate.displayDualDateIfInInterval(deathDates[1], link)
		if birthDates and birthDates[1] and (not birthDates[1].claim or birthDates[1].claim.mainsnak.snaktype == 'value') then
			if deathDates[1].precision > 7 and birthDates[1].precision > 7 then
				out = out .. ' (' .. plural{args={computeYearsPastBetween(deathDates[1], birthDates[1]), 'an', 'ani', 'de ani'}} .. ')'
			end
		end
		if deathDates[1].claim then
			out = out .. wikidata.outputReferences(deathDates[1].claim)
		end
		return out
	end
	return ''
end

p.getDdaByWikidata = function(frame) 
	local args = getArgs(frame)
	return p._getDdaByWikidata(args)
end
p.getDda = function(frame)
	local args = getArgs(frame)
	local link = false
	if args['link'] and mw.text.trim(args['link']) ~= '' then
		link = true
	end
	if args[1] then
		local d = {}
		d.year = tonumber(args[1])
		d.month = tonumber(args[2] or '1')
		d.day = tonumber(args[3] or '1')
		d.precision = 9
		d.calendar = mw.ustring.lower(args['calendar_death'] or 'gregorian')
		if args[2] then d.precision = 10 end
		if args[3] then d.precision = 11 end
		local b = {}
		b.year = tonumber(args[4])
		b.month = tonumber(args[5] or '1')
		b.day = tonumber(args[6] or '1')
		b.precision = 9
		b.calendar = mw.ustring.lower(args['calendar_birth'] or 'gregorian')
		if args[5] then b.precision = 10 end
		if args[6] then b.precision = 11 end
		return GregorianDate.displayDualDateIfInInterval(d, link) .. ' (' ..  plural{args={computeYearsPastBetween(d, b), 'an', 'ani', 'de ani'}} .. ')'
	else
		return p.getDdaByWikidata(frame)
	end
end

return p
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy