<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AWikidata%2Fdate</id>
	<title>وحدة:Wikidata/date - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AWikidata%2Fdate"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/date&amp;action=history"/>
	<updated>2026-06-05T10:18:56Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/date&amp;diff=368&amp;oldid=prev</id>
		<title>عبد العزيز: أنشأ الصفحة ب&#039;--settings local categoryUnknownBirthDate = &#039;تصنيف:صفحات تحتاج تصنيف سنة الولادة&#039;; local categoryUnknownDeathDate = &#039;[[Category:Date of...&#039;</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/date&amp;diff=368&amp;oldid=prev"/>
		<updated>2016-04-13T23:30:47Z</updated>

		<summary type="html">&lt;p&gt;أنشأ الصفحة ب&amp;#039;--settings local categoryUnknownBirthDate = &amp;#039;&lt;a href=&quot;/%D8%AA%D8%B5%D9%86%D9%8A%D9%81:%D8%B5%D9%81%D8%AD%D8%A7%D8%AA_%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC_%D8%AA%D8%B5%D9%86%D9%8A%D9%81_%D8%B3%D9%86%D8%A9_%D8%A7%D9%84%D9%88%D9%84%D8%A7%D8%AF%D8%A9&quot; title=&quot;تصنيف:صفحات تحتاج تصنيف سنة الولادة&quot;&gt;تصنيف:صفحات تحتاج تصنيف سنة الولادة&lt;/a&gt;&amp;#039;; local categoryUnknownDeathDate = &amp;#039;[[Category:Date of...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--settings&lt;br /&gt;
local categoryUnknownBirthDate = &amp;#039;[[تصنيف:صفحات تحتاج تصنيف سنة الولادة]]&amp;#039;;&lt;br /&gt;
local categoryUnknownDeathDate = &amp;#039;[[Category:Date of death missing]]&amp;#039;;&lt;br /&gt;
local categoryBigCurrentAge = &amp;#039;[[Категория:Википедия:Статьи о персоналиях с большим текущим возрастом]]&amp;#039;&lt;br /&gt;
local categoryBigDeathAge = &amp;#039;[[Категория:Википедия:Статьи о персоналиях с большим возрастом во время смерти]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local moduleDates = require( &amp;quot;Module:Dates&amp;quot; )&lt;br /&gt;
local moduleWikidata = require( &amp;quot;Module:Wikidata&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
function deepcopy(orig)&lt;br /&gt;
    local orig_type = type(orig)&lt;br /&gt;
    local copy&lt;br /&gt;
    if orig_type == &amp;#039;table&amp;#039; then&lt;br /&gt;
        copy = {}&lt;br /&gt;
        for orig_key, orig_value in next, orig, nil do&lt;br /&gt;
            copy[deepcopy(orig_key)] = deepcopy(orig_value)&lt;br /&gt;
        end&lt;br /&gt;
        setmetatable(copy, deepcopy(getmetatable(orig)))&lt;br /&gt;
    else -- number, string, boolean, etc&lt;br /&gt;
        copy = orig&lt;br /&gt;
    end&lt;br /&gt;
    return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- accepts table of time+precision values&lt;br /&gt;
function ageCurrent ( bTable )&lt;br /&gt;
	local possibleAge = &amp;quot;NYA&amp;quot; -- it meansm &amp;quot;Not Yet Assigned&amp;quot;, not what you imagined!&lt;br /&gt;
&lt;br /&gt;
	for bKey, bValue in pairs(bTable) do&lt;br /&gt;
		if ( bValue.unknown ) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local bStructure = bValue.structure&lt;br /&gt;
		local bPrecision = bValue.precision&lt;br /&gt;
&lt;br /&gt;
		local dStructure = os.date( &amp;quot;*t&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
		local calculatedAge = ageImpl ( bStructure, bPrecision, dStructure, 11 )&lt;br /&gt;
		if ( possibleAge == &amp;quot;NYA&amp;quot; ) then&lt;br /&gt;
			possibleAge = calculatedAge&lt;br /&gt;
		else&lt;br /&gt;
			if ( possibleAge ~= calculatedAge ) then&lt;br /&gt;
				possibleAge = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return possibleAge&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- accepts tables of time+precision values&lt;br /&gt;
function age ( bTable, dTable )&lt;br /&gt;
	local possibleAge = &amp;quot;NYA&amp;quot; -- it meansm &amp;quot;Not Yet Assigned&amp;quot;, not what you imagined!&lt;br /&gt;
&lt;br /&gt;
	for bKey, bValue in pairs( bTable ) do&lt;br /&gt;
		if ( bValue.unknown ) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local bStructure = bValue.structure&lt;br /&gt;
		local bPrecision = bValue.precision&lt;br /&gt;
&lt;br /&gt;
		for dKey, dValue in pairs( dTable ) do&lt;br /&gt;
			if ( dValue.unknown ) then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
			local dStructure = dValue.structure&lt;br /&gt;
			local dPrecision = dValue.precision&lt;br /&gt;
&lt;br /&gt;
			local calculatedAge = ageImpl ( bStructure, bPrecision, dStructure, dPrecision )&lt;br /&gt;
			if ( possibleAge == &amp;quot;NYA&amp;quot; ) then&lt;br /&gt;
				possibleAge = calculatedAge&lt;br /&gt;
			else&lt;br /&gt;
				if ( possibleAge ~= calculatedAge ) then&lt;br /&gt;
					possibleAge = nil&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return possibleAge&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ageImpl ( bStructure, bPrecision, dStructure, dPrecision )&lt;br /&gt;
	if ( not bStructure or not dStructure or bPrecision &amp;lt; 10 or dPrecision &amp;lt; 10 ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local shift = 0;&lt;br /&gt;
	if ( bStructure.year &amp;lt; 0 and dStructure.year &amp;gt; 0 ) then&lt;br /&gt;
		shift = -1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
 	if ( bPrecision == 10 or dPrecision == 10 ) then&lt;br /&gt;
 		if ( bStructure.month &amp;lt; dStructure.month ) then&lt;br /&gt;
 			return dStructure.year - bStructure.year + shift&lt;br /&gt;
 		end&lt;br /&gt;
 		if ( bStructure.month == dStructure.month ) then&lt;br /&gt;
 			return nil&lt;br /&gt;
 		end&lt;br /&gt;
 		if ( bStructure.month &amp;gt; dStructure.month ) then&lt;br /&gt;
 			return dStructure.year - bStructure.year - 1 + shift&lt;br /&gt;
 		end&lt;br /&gt;
 	end&lt;br /&gt;
 &lt;br /&gt;
  	if ( bStructure.month &amp;lt; dStructure.month ) then&lt;br /&gt;
 		return dStructure.year - bStructure.year + shift&lt;br /&gt;
 	end&lt;br /&gt;
 	if ( bStructure.month == dStructure.month ) then&lt;br /&gt;
	  	if ( bStructure.day &amp;lt;= dStructure.day ) then&lt;br /&gt;
	 		return dStructure.year - bStructure.year + shift&lt;br /&gt;
	 	else &lt;br /&gt;
	 		return dStructure.year - bStructure.year - 1 + shift&lt;br /&gt;
 		end&lt;br /&gt;
 	end&lt;br /&gt;
 	if ( bStructure.month &amp;gt; dStructure.month ) then&lt;br /&gt;
 		return dStructure.year - bStructure.year - 1 + shift&lt;br /&gt;
 	end&lt;br /&gt;
&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns table of time+precision values for specified property&lt;br /&gt;
function parseProperty ( context, options, propertyId )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options.entity ) then error( &amp;#039;options.entity is missing&amp;#039;); end;&lt;br /&gt;
	if ( not propertyId ) then error( &amp;#039;propertyId not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	local claims = context.selectClaims( options, propertyId );&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for key, claim in pairs( claims ) do&lt;br /&gt;
		table.insert ( result, parseClaim( claim ) );&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parseClaim ( claim )&lt;br /&gt;
	if ( claim.mainsnak.snaktype == &amp;quot;value&amp;quot; ) then&lt;br /&gt;
		-- The calendar model used for saving the data is always the proleptic Gregorian calendar according to ISO 8601.&lt;br /&gt;
		local timeISO8601 = string.gsub( string.gsub( tostring( claim.mainsnak.datavalue.value.time ), &amp;#039;-00%-&amp;#039;, &amp;#039;-01-&amp;#039; ), &amp;#039;-00T&amp;#039;, &amp;#039;-01T&amp;#039; )&lt;br /&gt;
		local unixtime = parseISO8601( timeISO8601 )&lt;br /&gt;
		local structure = os.date(&amp;quot;*t&amp;quot;, unixtime)&lt;br /&gt;
		local precision = tonumber( claim.mainsnak.datavalue.value.precision )&lt;br /&gt;
		local item = { structure=structure, precision=precision }&lt;br /&gt;
		return item;&lt;br /&gt;
	elseif ( claim.mainsnak.snaktype == &amp;quot;novalue&amp;quot; ) then&lt;br /&gt;
		-- novalue&lt;br /&gt;
		return { unknown=&amp;quot;novalue&amp;quot; };&lt;br /&gt;
	else&lt;br /&gt;
		--unknown &lt;br /&gt;
		return { unknown=&amp;quot;unknown&amp;quot; };&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- проверка на совпадающие даты с разной моделью календаря&lt;br /&gt;
function checkDupDates( t )&lt;br /&gt;
	if #t &amp;gt; 1 then&lt;br /&gt;
		local removed = false;&lt;br /&gt;
		local j = 1;&lt;br /&gt;
		-- проверка на совпадающие даты с разной моделью календаря&lt;br /&gt;
		while (j &amp;lt;= #t)  do&lt;br /&gt;
			local i = 1;&lt;br /&gt;
			while (i &amp;lt;= #t)  do&lt;br /&gt;
				if i ~= j then&lt;br /&gt;
					if (os.time(t[j].structure) == os.time(t[i].structure)) then&lt;br /&gt;
						if ((t[j].calendarmodel == &amp;#039;gregorian&amp;#039;) and &lt;br /&gt;
							(t[i].calendarmodel == &amp;#039;julian&amp;#039;)) then&lt;br /&gt;
							removed = true;&lt;br /&gt;
							break;&lt;br /&gt;
						else&lt;br /&gt;
							table.remove(t, i)&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
					  i = i + 1;&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					i = i + 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if removed then&lt;br /&gt;
				removed = false;&lt;br /&gt;
				table.remove(t, j);&lt;br /&gt;
			else&lt;br /&gt;
				j = j+1;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns first qualifier of specified propertyId&lt;br /&gt;
function getQualifierDataValue( statement, qualifierPropertyId )&lt;br /&gt;
	if ( statement.qualifiers&lt;br /&gt;
			and statement.qualifiers[qualifierPropertyId] ) then&lt;br /&gt;
		local qualifiers = statement.qualifiers[qualifierPropertyId];&lt;br /&gt;
		for _, qualifier in ipairs( qualifiers ) do&lt;br /&gt;
			if (qualifier.datavalue) then&lt;br /&gt;
				return qualifier.datavalue;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.formatDateOfBirthClaim( context, options, statement )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options.entity ) then error( &amp;#039;options.entity is missing&amp;#039;); end;&lt;br /&gt;
	if ( not statement ) then error( &amp;#039;statement not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	if ( statement.mainsnak.snaktype == &amp;#039;somevalue&amp;#039; ) then&lt;br /&gt;
		local qNotSoonerThan = getQualifierDataValue( statement, &amp;#039;P1319&amp;#039; );&lt;br /&gt;
		local qNotLaterThan = getQualifierDataValue( statement, &amp;#039;P1326&amp;#039; );&lt;br /&gt;
		if ( qNotSoonerThan or qNotLaterThan ) then&lt;br /&gt;
			local results = {};&lt;br /&gt;
			if ( qNotSoonerThan ) then&lt;br /&gt;
				table.insert( results, &amp;#039;не&amp;amp;nbsp;ранее&amp;amp;nbsp;&amp;#039; .. formatDateImpl( qNotSoonerThan.value, {}, nil, nil ) );&lt;br /&gt;
			end&lt;br /&gt;
			if ( qNotLaterThan ) then&lt;br /&gt;
				table.insert( results, &amp;#039;не&amp;amp;nbsp;позднее&amp;amp;nbsp;&amp;#039; .. formatDateImpl( qNotLaterThan.value, {}, nil, nil ) );&lt;br /&gt;
			end&lt;br /&gt;
		    return mw.text.listToText( results, &amp;#039; и &amp;#039; , &amp;#039; и &amp;#039; ) .. categoryUnknownBirthDate;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    options[&amp;#039;conjunction&amp;#039;] = &amp;#039;&amp;amp;#32;или&amp;amp;#32;&amp;#039;;&lt;br /&gt;
    options[&amp;#039;value-module&amp;#039;] = &amp;#039;Wikidata/date&amp;#039;;&lt;br /&gt;
    options[&amp;#039;value-function&amp;#039;] = &amp;#039;formatBirthDate&amp;#039;;&lt;br /&gt;
    options.i18n.somevalue = &amp;#039;\&amp;#039;\&amp;#039;неизвестно\&amp;#039;\&amp;#039;&amp;#039; .. categoryUnknownBirthDate;&lt;br /&gt;
    options.i18n.circa = &amp;#039;&amp;lt;span style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot; title=&amp;quot;около&amp;quot;&amp;gt;ок. &amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
	local result = context.formatStatementDefault( context, options, statement );&lt;br /&gt;
&lt;br /&gt;
	local bTable = { parseClaim( statement ) };&lt;br /&gt;
	local dTable = parseProperty ( context, options, &amp;#039;P570&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	if ( bTable and not dTable ) then&lt;br /&gt;
		local age = ageCurrent( bTable )&lt;br /&gt;
		if ( age ) then&lt;br /&gt;
			result = result .. &amp;#039; &amp;lt;span style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;(&amp;#039; .. age .. &amp;#039; &amp;#039; .. mw.language.new( &amp;#039;ru&amp;#039; ):plural( age, &amp;#039;год&amp;#039;, &amp;#039;года&amp;#039;, &amp;#039;лет&amp;#039;) .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		    if ( age &amp;gt; 150 and not options.nocat ) then&lt;br /&gt;
		        result = result .. categoryBigCurrentAge;&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDateOfDeathClaim( context, options, statement )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options.entity ) then error( &amp;#039;options.entity is missing&amp;#039;); end;&lt;br /&gt;
	if ( not statement ) then error( &amp;#039;statement not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	if ( statement.mainsnak.snaktype == &amp;#039;somevalue&amp;#039; ) then&lt;br /&gt;
		local qNotSoonerThan = getQualifierDataValue( statement, &amp;#039;P1319&amp;#039; );&lt;br /&gt;
		local qNotLaterThan = getQualifierDataValue( statement, &amp;#039;P1326&amp;#039; );&lt;br /&gt;
		if ( qNotSoonerThan or qNotLaterThan ) then&lt;br /&gt;
			local results = {};&lt;br /&gt;
			if ( qNotSoonerThan ) then&lt;br /&gt;
				table.insert( results, &amp;#039;не&amp;amp;nbsp;ранее&amp;amp;nbsp;&amp;#039; .. formatDateImpl( qNotSoonerThan.value, {}, nil, nil ) );&lt;br /&gt;
			end&lt;br /&gt;
			if ( qNotLaterThan ) then&lt;br /&gt;
				table.insert( results, &amp;#039;не&amp;amp;nbsp;позднее&amp;amp;nbsp;&amp;#039; .. formatDateImpl( qNotLaterThan.value, {}, nil, nil ) );&lt;br /&gt;
			end&lt;br /&gt;
		    return mw.text.listToText( results, &amp;#039; и &amp;#039; , &amp;#039; и &amp;#039; ) .. categoryUnknownDeathDate;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    options[&amp;#039;conjunction&amp;#039;] = &amp;#039;&amp;amp;#32;или&amp;amp;#32;&amp;#039;;&lt;br /&gt;
    options[&amp;#039;value-module&amp;#039;] = &amp;#039;Wikidata/date&amp;#039;;&lt;br /&gt;
    options[&amp;#039;value-function&amp;#039;] = &amp;#039;formatDeathDate&amp;#039;;&lt;br /&gt;
    options.i18n.somevalue = &amp;#039;\&amp;#039;\&amp;#039;неизвестно\&amp;#039;\&amp;#039;&amp;#039; .. categoryUnknownDeathDate;&lt;br /&gt;
    options.i18n.circa = &amp;#039;&amp;lt;span style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot; title=&amp;quot;около&amp;quot;&amp;gt;ок. &amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
	local result = context.formatStatementDefault( context, options, statement );&lt;br /&gt;
&lt;br /&gt;
	local bTable = parseProperty ( context, options, &amp;#039;P569&amp;#039; )&lt;br /&gt;
	local dTable = { parseClaim( statement ) };&lt;br /&gt;
&lt;br /&gt;
	if ( bTable and dTable ) then&lt;br /&gt;
		local age = age( bTable, dTable )&lt;br /&gt;
		if ( age ) then&lt;br /&gt;
			result = result .. &amp;#039; &amp;lt;span style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;(&amp;#039; .. age .. &amp;#039; &amp;#039; .. mw.language.new( &amp;#039;ru&amp;#039; ):plural( age, &amp;#039;год&amp;#039;, &amp;#039;года&amp;#039;, &amp;#039;лет&amp;#039;) .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		    if ( age &amp;gt; 150 and (not context.options or not context.options.nocat) ) then&lt;br /&gt;
		        result = result .. categoryBigDeathAge;&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Reentry point for Wikidata Snak formatting&lt;br /&gt;
function p.formatBirthDate( context, options, value )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not value ) then error( &amp;#039;value not specified&amp;#039;); end;&lt;br /&gt;
	&lt;br /&gt;
	if ( options.nocat ) then&lt;br /&gt;
		return formatDateImpl( value, options, &amp;#039;bday&amp;#039;, nil )&lt;br /&gt;
	else&lt;br /&gt;
		return formatDateImpl( value, options, &amp;#039;bday&amp;#039;, &amp;#039;Родившиеся&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Reentry point for Wikidata Snak formatting&lt;br /&gt;
function p.formatDeathDate( context, options, value )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not value ) then error( &amp;#039;value not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	if ( options.nocat ) then&lt;br /&gt;
		return formatDateImpl( value, options, &amp;#039;dday&amp;#039;, nil )&lt;br /&gt;
	else&lt;br /&gt;
		return formatDateImpl( value, options, &amp;#039;dday&amp;#039;, &amp;#039;Умершие&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Reentry point for Wikidata Snak formatting -- default one&lt;br /&gt;
function p.formatDate( context, options, value )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
	if ( not value ) then error( &amp;#039;value not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	local microformatClass = options.microfortmat or nil;&lt;br /&gt;
	if ( options.nocat ) then&lt;br /&gt;
		return formatDateImpl( value, options, microformatClass, nil )&lt;br /&gt;
	else&lt;br /&gt;
		local categoryPrefix = options.categoryPrefix or nil;&lt;br /&gt;
		return formatDateImpl( value, options, microformatClass, categoryPrefix )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatDateImpl( value, options, microformatClass, categoryPrefix )&lt;br /&gt;
	if ( not value ) then error( &amp;#039;value not specified&amp;#039;); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039;); end;&lt;br /&gt;
&lt;br /&gt;
	-- The calendar model used for saving the data is always the proleptic Gregorian calendar according to ISO 8601.&lt;br /&gt;
	local timeISO8601 = string.gsub( string.gsub( tostring( value.time ), &amp;#039;-00%-&amp;#039;, &amp;#039;-01-&amp;#039; ), &amp;#039;-00T&amp;#039;, &amp;#039;-01T&amp;#039; )&lt;br /&gt;
	local unixtime = parseISO8601( timeISO8601 )&lt;br /&gt;
&lt;br /&gt;
	local structure = os.date(&amp;quot;*t&amp;quot;, unixtime)&lt;br /&gt;
	local precision = tonumber( value.precision )&lt;br /&gt;
	&lt;br /&gt;
	if precision == 7 then&lt;br /&gt;
		return formatCentury(structure, categoryPrefix)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if precision == 8 then&lt;br /&gt;
		return formatDecade(structure, categoryPrefix)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if precision == 9 then&lt;br /&gt;
		local tCopy = deepcopy( structure )&lt;br /&gt;
		tCopy.day = nil&lt;br /&gt;
		tCopy.month = nil&lt;br /&gt;
		return moduleDates.formatWikiImpl(tCopy, tCopy, infoclass, categoryPrefix)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- year and month only&lt;br /&gt;
	if precision == 10 then&lt;br /&gt;
		local tCopy = deepcopy( structure )&lt;br /&gt;
		tCopy.day = nil&lt;br /&gt;
		return moduleDates.formatWikiImpl(tCopy, tCopy, infoclass, categoryPrefix)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local calendarmodel = &amp;#039;gregorian&amp;#039;;&lt;br /&gt;
	if (mw.ustring.find(value.calendarmodel, &amp;#039;Q1985786&amp;#039;, 1, true)) then&lt;br /&gt;
		calendarmodel = &amp;#039;julian&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (calendarmodel == &amp;#039;gregorian&amp;#039;) then&lt;br /&gt;
    	return moduleDates.formatWikiImpl( structure, structure, microformatClass, categoryPrefix )&lt;br /&gt;
    else&lt;br /&gt;
		return p.formatAsJulian( unixtime, infoclass, categoryPrefix )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatDecade( time, categoryNamePrefix )&lt;br /&gt;
	if ( time.year &amp;lt; 0 ) then&lt;br /&gt;
		local year = math.floor( math.abs(time.year) / 10 ) * 10;&lt;br /&gt;
		if ( categoryNamePrefix ) then&lt;br /&gt;
			return year .. &amp;#039;-е до н. э.[[К:&amp;#039; .. categoryNamePrefix .. &amp;#039; в &amp;#039; .. year .. &amp;#039;-е годы до н. э.]]&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;&amp;#039; .. year .. &amp;#039; до н. э.&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local year = math.floor( time.year / 10 ) * 10;&lt;br /&gt;
		if ( categoryNamePrefix ) then&lt;br /&gt;
			return year .. &amp;#039;-е[[К:&amp;#039; .. categoryNamePrefix .. &amp;#039; в &amp;#039; .. year .. &amp;#039;-е годы]]&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;&amp;#039; .. year;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatCentury( time, categoryNamePrefix )&lt;br /&gt;
	local moduleRoman = require( &amp;quot;Module:RomanNumber&amp;quot; )&lt;br /&gt;
	if ( time.year &amp;lt; 0 ) then&lt;br /&gt;
		local century = math.floor( (math.abs( time.year) - 1) / 100 ) + 1;&lt;br /&gt;
		if ( moduleRoman ) then&lt;br /&gt;
			century = moduleRoman.toRomanNumber( century );&lt;br /&gt;
		end&lt;br /&gt;
		if ( categoryNamePrefix ) then&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. century .. &amp;#039; век до н. э.]][[К:&amp;#039; .. categoryNamePrefix .. &amp;#039; в &amp;#039; .. century .. &amp;#039; веке до н. э.]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. century .. &amp;#039; век до н. э.]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local century = math.floor( (time.year - 1) / 100 ) + 1;&lt;br /&gt;
		if ( moduleRoman ) then&lt;br /&gt;
			century = moduleRoman.toRomanNumber( century );&lt;br /&gt;
		end&lt;br /&gt;
		if ( categoryNamePrefix ) then&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. century .. &amp;#039; век]][[К:&amp;#039; .. categoryNamePrefix .. &amp;#039; в &amp;#039; .. century .. &amp;#039; веке]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. century .. &amp;#039; век]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parseISO8601Date(str)&lt;br /&gt;
	local pattern = &amp;quot;(%-?%d+)%-(%d+)%-(%d+)T&amp;quot;&lt;br /&gt;
	local Y, M, D = mw.ustring.match( str, pattern )&lt;br /&gt;
	return tonumber(Y), tonumber(M), tonumber(D)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function parseISO8601Time(str)&lt;br /&gt;
	local pattern = &amp;quot;T(%d+):(%d+):(%d+)%Z&amp;quot;&lt;br /&gt;
	local H, M, S = mw.ustring.match( str, pattern)&lt;br /&gt;
	return tonumber(H), tonumber(M), tonumber(S)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function parseISO8601Offset(str)&lt;br /&gt;
	if str:sub(-1)==&amp;quot;Z&amp;quot; then return 0,0 end -- ends with Z, Zulu time&lt;br /&gt;
 &lt;br /&gt;
	-- matches ±hh:mm, ±hhmm or ±hh; else returns nils &lt;br /&gt;
	local pattern = &amp;quot;([-+])(%d%d):?(%d?%d?)$&amp;quot;&lt;br /&gt;
	local sign, oh, om = mw.ustring.match( str, pattern) &lt;br /&gt;
	sign, oh, om = sign or &amp;quot;+&amp;quot;, oh or &amp;quot;00&amp;quot;, om or &amp;quot;00&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
	return tonumber(sign .. oh), tonumber(sign .. om)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function parseISO8601(str)&lt;br /&gt;
	if &amp;#039;table&amp;#039;==type(str) then&lt;br /&gt;
		if str.args and str.args[1] then&lt;br /&gt;
			str = &amp;#039;&amp;#039; .. str.args[1]&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;unknown argument type: &amp;#039; .. type( str ) .. &amp;#039;: &amp;#039; .. table.tostring( str )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local Y,M,D = parseISO8601Date(str)&lt;br /&gt;
	local h,m,s = parseISO8601Time(str)&lt;br /&gt;
	local oh,om = parseISO8601Offset(str)&lt;br /&gt;
	return tonumber(os.time({year=Y, month=M, day=D, hour=(h+oh), min=(m+om), sec=s}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local lowestBoundary = parseISO8601(&amp;#039;-900-02-20T00:00:00Z&amp;#039;)&lt;br /&gt;
local mainBoundary = parseISO8601(&amp;#039;1582-10-15T00:00:00Z&amp;#039;)&lt;br /&gt;
local lastBoundary = parseISO8601(&amp;#039;1918-01-26T00:00:00Z&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
boundaries = {&lt;br /&gt;
	-- from (G) till next will be diff(G = J + diff), at current&lt;br /&gt;
	{ lowestBoundary,                         -9 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-700-02-21T00:00:00Z&amp;#039;), -8 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-600-02-22T00:00:00Z&amp;#039;), -7 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-500-02-23T00:00:00Z&amp;#039;), -6 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-300-02-24T00:00:00Z&amp;#039;), -5 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-200-02-25T00:00:00Z&amp;#039;), -4 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;-100-02-26T00:00:00Z&amp;#039;), -3 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0000-00-00T00:00:00Z&amp;#039;), -2 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0100-02-27T00:00:00Z&amp;#039;), -1 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0200-02-28T00:00:00Z&amp;#039;),  0 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0300-03-01T00:00:00Z&amp;#039;),  1 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0500-03-02T00:00:00Z&amp;#039;),  2 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0600-03-03T00:00:00Z&amp;#039;),  3 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0700-03-04T00:00:00Z&amp;#039;),  4 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;0900-03-05T00:00:00Z&amp;#039;),  5 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1000-03-06T00:00:00Z&amp;#039;),  6 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1100-03-07T00:00:00Z&amp;#039;),  7 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1300-03-08T00:00:00Z&amp;#039;),  8 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1400-03-09T00:00:00Z&amp;#039;),  9 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1500-03-10T00:00:00Z&amp;#039;), 10 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1700-03-11T00:00:00Z&amp;#039;), 11 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1800-03-12T00:00:00Z&amp;#039;), 12 },&lt;br /&gt;
	{ parseISO8601(&amp;#039;1900-03-13T00:00:00Z&amp;#039;), 13 },&lt;br /&gt;
	{ lastBoundary, &amp;#039;&amp;#039; },&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- Передаваемое время обязано быть по Григорианскому календарю (новому стилю)&lt;br /&gt;
function p.formatAsJulian( time, infocardClass, categoryNamePrefix )&lt;br /&gt;
	if &amp;#039;table&amp;#039;==type( time ) then&lt;br /&gt;
		if time.args and time.args[1] then&lt;br /&gt;
			time = tonumber( time.args[1] )&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;unknown argument type: &amp;#039; .. type( time ) .. &amp;#039;: &amp;#039; .. table.tostring( time )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local t = os.date(&amp;quot;*t&amp;quot;, time)&lt;br /&gt;
	if ( time &amp;lt;= lowestBoundary ) then&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;некорректная дата (недостижимая точность)&amp;#039;&amp;#039;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	if ( time &amp;gt;= lastBoundary ) then&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;некорректная дата (юлианский не используется после 1918-01-26)&amp;#039;&amp;#039;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    for i=1,#boundaries,1 do&lt;br /&gt;
		local b1 = boundaries[i][1];&lt;br /&gt;
		local b2 = boundaries[i + 1][1];&lt;br /&gt;
		if ( b1 &amp;lt;= time and time &amp;lt; b2 ) then&lt;br /&gt;
			local b1s = os.date(&amp;quot;*t&amp;quot;, b1)&lt;br /&gt;
			if ( b1s.year == t.year and b1s.month == t.month and b1s.day == t.day) then&lt;br /&gt;
				if ( time &amp;lt; mainBoundary ) then&lt;br /&gt;
					-- only julian&lt;br /&gt;
					return moduleDates.formatWikiImpl( {year=t.year, month=2, day=29}, {year=t.year, month=2, day=29}, infocardClass, categoryNamePrefix );&lt;br /&gt;
				else&lt;br /&gt;
					--julian and grigorian&lt;br /&gt;
					return moduleDates.formatWikiImpl( {year=t.year, month=2, day=29}, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				local julian = os.date(&amp;quot;*t&amp;quot;, time - boundaries[i][2] * 24 * 60 * 60);&lt;br /&gt;
				if ( time &amp;lt; mainBoundary ) then&lt;br /&gt;
					-- only julian&lt;br /&gt;
					return moduleDates.formatWikiImpl( julian, julian, infocardClass, categoryNamePrefix );&lt;br /&gt;
				else&lt;br /&gt;
					--julian and grigorian&lt;br /&gt;
					return moduleDates.formatWikiImpl( julian, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if ( time &amp;gt;= lastBoundary ) then&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;ошибка в модуле Модуль:Wikidata/date (не найден сдвиг конвертации календаря)&amp;#039;&amp;#039;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>