CINXE.COM
Просмотр кода страницы Модуль:Calendar — Википедия
<!DOCTYPE html> <html class="client-nojs" lang="ru" dir="ltr"> <head> <meta charset="UTF-8"> <title>Просмотр кода страницы Модуль:Calendar — Википедия</title> <script>(function(){var className="client-js";var cookie=document.cookie.match(/(?:^|; )ruwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":true,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"8ba1a2ea-6cc8-41dc-83f5-e63aa69a0ea0","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Модуль:Calendar","wgTitle":"Calendar","wgCurRevisionId":130496124,"wgRevisionId":0,"wgArticleId":8097687,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[], "wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Модуль:Calendar","wgRelevantArticleId":8097687,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["sysop"],"wgRestrictionMove":["sysop"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":130496124,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":40000,"wgCodeEditorCurrentLanguage":"lua","wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":true, "wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.common-site":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.codeEditor.styles":"ready","skins.vector.styles.legacy":"ready","mediawiki.ui.button":"ready","ext.charinsert.styles":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","codex-search-styles":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.codeEditor","ext.scribunto.edit", "mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.legacy.js","ext.centralNotice.geoIP","ext.charinsert","ext.flaggedRevs.advanced","ext.gadget.common-action-edit","ext.gadget.collapserefs","ext.gadget.directLinkToCommons","ext.gadget.referenceTooltips","ext.gadget.logo","ext.gadget.edittop","ext.gadget.navboxDefaultGadgets","ext.gadget.wikibugs","ext.gadget.wikificator","ext.gadget.summaryButtons","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","oojs-ui.styles.icons-media","oojs-ui-core.icons","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=ru&modules=codex-search-styles%7Cext.charinsert.styles%7Cext.codeEditor.styles%7Cext.flaggedRevs.basic%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.ui.button%7Cskins.vector.styles.legacy&only=styles&skin=vector"> <script async="" src="/w/load.php?lang=ru&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=ru&modules=ext.gadget.common-site&only=styles&skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=ru&modules=site.styles&only=styles&skin=vector"> <noscript><link rel="stylesheet" href="/w/load.php?lang=ru&modules=noscript&only=styles&skin=vector"></noscript> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Просмотр кода страницы Модуль:Calendar — Википедия"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//ru.m.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Википедия (ru)"> <link rel="EditURI" type="application/rsd+xml" href="//ru.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ru"> <link rel="alternate" type="application/atom+xml" title="Википедия — Atom-лента" href="/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%B2%D0%B5%D0%B6%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8&feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="codeeditor-loading skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Модуль_Calendar rootpage-Модуль_Calendar skin-vector action-edit"><div id="mw-page-base" class="noprint"></div> <div id="mw-head-base" class="noprint"></div> <div id="content" class="mw-body" role="main"> <a id="top"></a> <div id="siteNotice"><!-- CentralNotice --></div> <div class="mw-indicators"> </div> <h1 id="firstHeading" class="firstHeading mw-first-heading">Просмотр кода страницы Модуль:Calendar</h1> <div id="bodyContent" class="vector-body"> <div id="contentSub"><div id="mw-content-subtitle">← <a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" title="Модуль:Calendar">Модуль:Calendar</a></div></div> <div id="contentSub2"></div> <div id="jump-to-nav"></div> <a class="mw-jump-link" href="#mw-head">Перейти к навигации</a> <a class="mw-jump-link" href="#searchInput">Перейти к поиску</a> <div id="mw-content-text" class="mw-body-content"><p>У вас нет прав на выполнение действия «редактирование этой страницы» по следующим причинам: </p> <ul class="permissions-errors"><li class="mw-permissionerror-protectedpagetext"><div class="mw-parser-output"><style data-mw-deduplicate="TemplateStyles:r138182021">.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice{padding:1em 1.25em;margin-bottom:.25em}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice .mbox-image{vertical-align:top;padding:0 .5em 0 .25em}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice .mbox-text{padding:0}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-no-header .ts-editnotice-text>p:first-child{margin-top:0}.mw-parser-output .fmbox.fmbox-editnotice .ts-editnotice-text>p:last-child{margin-bottom:0}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-error{background:var(--background-color-error-subtle,#fee7e6);border:1px solid #d33}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-warning{background:var(--background-color-warning-subtle,#fef6e7);border:1px solid #fc3}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-neutral{background:var(--background-color-neutral,#eaecf0);border:1px solid #c8ccd1}.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-success{background:var(--background-color-success-subtle,#d5fdf4);border:1px solid #00af89}.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-error,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-warning,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-neutral,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-success,.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-included{border:0;padding:0;background:0}.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-error .mbox-image,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-warning .mbox-image,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-neutral .mbox-image,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-success .mbox-image,.mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-included .mbox-image{padding:0 .25em 0 0;vertical-align:top}.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-error .mbox-text,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-warning .mbox-text,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-neutral .mbox-text,.mw-parser-output .errorbox .fmbox.fmbox-editnotice.ts-editnotice-success .mbox-text,.mw-parser-output .ts-editnotice-included .mbox-text{padding:0}.mw-parser-output .fmbox.fmbox-editnotice h2{margin:0;padding:0;border-bottom:0;font-family:inherit;font-size:115%;font-weight:bold;line-height:1.6}html.ve-active .mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice-neutral{background:none;border:none;padding:0}html.ve-active .mw-parser-output .fmbox.fmbox-editnotice.ts-editnotice .mbox-image{display:none}</style><style data-mw-deduplicate="TemplateStyles:r138181849">.mw-parser-output .fmbox{clear:both;margin:0.2em 0;width:100%;border:1px solid var(--border-color-base,#a2a9b1);background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box}.mw-parser-output .fmbox-warning{border:1px solid #bb7070;background-color:#ffdbdb}.mw-parser-output .fmbox-editnotice{background-color:transparent}.mw-parser-output .fmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .fmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .fmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .fmbox .mbox-invalid-type{text-align:center}.mw-parser-output .fmbox .mbox-textsmall-div{font-size:90%}</style><table class="plainlinks fmbox fmbox-editnotice ts-editnotice ts-editnotice-error ts-editnotice-no-header" role="presentation"><tbody><tr><td class="mbox-image"><span class="mw-valign-middle" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/0/0f/OOjs_UI_icon_lock-destructive.svg/20px-OOjs_UI_icon_lock-destructive.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/0f/OOjs_UI_icon_lock-destructive.svg/30px-OOjs_UI_icon_lock-destructive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/0f/OOjs_UI_icon_lock-destructive.svg/40px-OOjs_UI_icon_lock-destructive.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></td><td class="mbox-text"><div class="mbox-text-div"><div class="ts-editnotice-text"> <p>Эта страница <b><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D1%8B_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86" title="Википедия:Правила защиты страниц">защищена</a></b> и может редактироваться только <b><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%90%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B" title="Википедия:Администраторы">администраторами</a></b> и <b><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%98%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D1%8B" title="Википедия:Инженеры">инженерами</a></b>. </p> </div></div><div class="mbox-textsmall-div hide-when-compact"></div></td></tr></tbody></table></div> <div class="mw-parser-output"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138182021"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138181849"><table class="plainlinks fmbox fmbox-editnotice ts-editnotice ts-editnotice-neutral ts-editnotice-no-header" role="presentation"><tbody><tr><td class="mbox-image"><span class="skin-invert-image" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/20px-OOjs_UI_icon_information.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/30px-OOjs_UI_icon_information.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/40px-OOjs_UI_icon_information.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></td><td class="mbox-text"><div class="mbox-text-div"><div class="ts-editnotice-text"> <p><b>Почему так произошло:</b> </p> <ul><li>Некоторые <a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B" title="Википедия:Шаблоны">шаблоны</a> постоянно защищены, статьи могут быть временно защищены из-за <a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D0%BE%D0%B9%D0%BD%D0%B0_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BA" title="Википедия:Война правок">войны правок</a>.</li> <li>Причина может быть указана в <a class="external text" href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Log&type=protect&page=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar">журнале защиты</a>. Если в журнале нет подходящих записей, возможно, страница была переименована после защиты.</li></ul> <p><b>Вы можете:</b> </p> <ul><li>свободно редактировать страницу документации модуля — <a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar/doc" title="Модуль:Calendar/doc">Модуль:Calendar/doc</a>;</li> <li><a href="/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F:Calendar" title="Обсуждение модуля:Calendar">обсудить эту страницу</a> с другими участниками;</li> <li><span class="plainlinks"><a class="external text" href="https://ru.wikipedia.org/w/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%3ACalendar&preload=Template%3ASubmit+an+edit+request%2Fpreload&action=edit&section=new&editintro=Template%3AEdit+protected%2Feditintro&dtpreload=1&preloadtitle=%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81+%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8+%D0%B7%D0%B0%D1%89%D0%B8%D1%89%D1%91%D0%BD%D0%BD%D0%BE%D0%B9+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B+%D0%BE%D1%82+24+%D0%BD%D0%BE%D1%8F%D0%B1%D1%80%D1%8F+2024&preloadparams%5B%5D=edit+protected&preloadparams%5B%5D=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACalendar">добавить на странице обсуждения запрос к администраторам</a></span> на изменение страницы.</li> <li class="mw-empty-elt"></li><li class="group-user-show"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D1%8B" title="Википедия:Снятие защиты">предложить снять защиту</a> со страницы.</li></ul> <p class="mw-empty-elt"> </p> </div></div><div class="mbox-textsmall-div hide-when-compact"></div></td></tr></tbody></table></div></li><li class="mw-permissionerror-blockedtext"><div class="mw-parser-output"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138182021"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138181849"><table class="plainlinks fmbox fmbox-editnotice ts-editnotice ts-editnotice-error ts-editnotice-no-header" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/OOjs_UI_icon_error-destructive.svg/20px-OOjs_UI_icon_error-destructive.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/OOjs_UI_icon_error-destructive.svg/30px-OOjs_UI_icon_error-destructive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4e/OOjs_UI_icon_error-destructive.svg/40px-OOjs_UI_icon_error-destructive.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></td><td class="mbox-text"><div class="mbox-text-div"><div class="ts-editnotice-text"> <p><b><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8" title="Википедия:Блокировки">Ваш диапазон IP-адресов заблокирован</a>.</b> <br /> Вы не можете править Википедию, но можете продолжать читать её. Просмотреть вики-текст страницы можно в текстовом поле ниже. </p> </div></div><div class="mbox-textsmall-div hide-when-compact"></div></td></tr></tbody></table></div> <div class="mw-parser-output"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138182021"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r138181849"><table class="plainlinks fmbox fmbox-editnotice ts-editnotice ts-editnotice-neutral ts-editnotice-no-header" role="presentation"><tbody><tr><td class="mbox-image"><span class="skin-invert-image" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/20px-OOjs_UI_icon_information.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/30px-OOjs_UI_icon_information.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/40px-OOjs_UI_icon_information.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></td><td class="mbox-text"><div class="mbox-text-div"><div class="ts-editnotice-text"> <p><b>Причина <a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8" title="Википедия:Блокировки">блокировки</a></b><br /> </p> <hr /> <p>Этот IP-адрес принадлежит <a href="/wiki/%D0%A5%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F" title="Хостинговая компания">хостинговой компании</a> и, скорее всего, <b><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9D%D0%B5%D0%B4%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2" title="Википедия:Недопустимость использования открытых прокси-серверов">является открытым прокси</a></b>. </p><p>Пожалуйста, для редактирования Википедии используйте своего обычного интернет-провайдера. </p> <hr /> <p><br /> <b>Информация о блокировке</b><br />Заблокирован 8.222.0.0/16 администратором <a href="/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Ping08" title="Участник:Ping08">Ping08</a> в 16:01, 12 сентября 2021. Блокировка закончится в <b>16:01, 12 сентября 2026</b> (<a href="/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F" title="Всемирное координированное время">по часовому поясу UTC</a>). Ваш IP-адрес — <b>8.222.208.146</b>, технический номер блокировки — <b>#23789579</b>. </p><p><b>Ваш диапазон заблокирован за вандализм?</b> <br /> Диапазоны адресов интернет-провайдеров могут блокироваться <a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D0%B0%D0%BD%D0%B4%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC" title="Википедия:Вандализм">из-за упорного совершения неконструктивных правок</a> отдельными пользователями провайдера. Если вы встречаетесь с этим часто, лучше всего будет <a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F" title="Википедия:Регистрация">зарегистрироваться</a>, сейчас или после окончания блокировки (в зависимости от того, позволяют ли вам зарегистрироваться текущие настройки блокировки). </p><p><b>Ваш диапазон заблокирован как прокси?</b> </p> <ul><li>проверьте, отключены ли прокси в настройках браузера или компьютера;</li> <li>если вы уверены, что не пользуетесь прокси, воспользуйтесь кнопкой ниже, чтобы <span class="plainlinks cd-addTopicButton" style=""><a class="external text" href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Mytalk&action=edit&section=new&preload=t:preload/unblock"><span class="plainlinks" style="">запросить разблокировку</span></a></span>.</li></ul> <div style="margin:0.5em 0;"><span class="plainlinks cd-addTopicButton" style=""><a class="external text" href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Mytalk&action=edit&section=new&preload=t:preload/unblock&preloadtitle=Просьба+о+разблокировке"><span class="plainlinks mw-ui-button mw-ui-progressive" style="">Запросить разблокировку</span></a></span></div> </div></div><div class="mbox-textsmall-div hide-when-compact"></div></td></tr></tbody></table></div></li><li class="mw-permissionerror-globalblocking-blockedtext-range"><b>Your IP address is in a range that has been <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Global_blocks" class="extiw" title="m:Special:MyLanguage/Global blocks">blocked on all Wikimedia Foundation wikis</a>.</b> <p>The block was made by <a href="/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Jon_Kolbert" title="Участник:Jon Kolbert">Jon Kolbert</a>. The reason given is <i><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </i>. </p> <ul><li>Start of block: 15:12, 27 августа 2023</li> <li>Expiry of block: 15:12, 27 августа 2028</li></ul> <p>Your current IP address is 8.222.208.146. The blocked range is 8.222.128.0/17. </p><p>Пожалуйста, указывайте все эти сведения в любых своих обращениях. If you believe you were blocked by mistake, you can find additional information and instructions in the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">No open proxies</a> global policy. </p> Otherwise, to discuss the block please <a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">post a request for review on Meta-Wiki</a>. You could also send an email to the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">stewards</a> <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a> queue at <kbd>stewards@wikimedia.org</kbd> including all above details.</li></ul><hr /> <p>Вы можете просмотреть и скопировать исходный код этой страницы. </p><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">local p = {} -- Необходимые модули и переменные local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local mwlang = mw.getContentLanguage() local err = "―" -- NthDay nil result local tCon = table.concat -- 00) Блок многократно используемых списков local bool_to_number={ [true]=1, [false]=0 } local monthlang = {"января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"} local month_to_num = {["января"]=1,["февраля"]=2,["марта"]=3,["апреля"]=4,["мая"]=5,["июня"]=6, ["июля"]=7,["августа"]=8,["сентября"]=9,["октября"]=10,["ноября"]=11,["декабря"]=12,["-"]=""} local monthd = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} local params = { {"г", "g"}, {"ю", "j"}} local comment = { '<span style="border-bottom: 1px dotted; cursor: help" title="по юлианскому календарю">','</span>'} -- duplicates: -- AST, BST, CST, ECT, IST, MST, PST, SST, local known_tzs = { ACDT='+10:30', ACST='+09:30', ACT ='+08:00', ADT ='-03:00', AEDT ='+11:00', AEST='+10:00', AFT ='+04:30', AKDT='-08:00', AKST ='-09:00', AMST ='+05:00', AMT ='+04:00', ART ='-03:00', AST ='+03:00', AST ='+04:00', AST ='+03:00', AST ='-04:00', AWDT='+09:00', AWST='+08:00', AZOST='-01:00', AZT ='+04:00', BDT ='+08:00', BIOT='+06:00', BIT ='-12:00', BOT ='-04:00', BRT ='-03:00', BST ='+06:00', BST ='+01:00', BTT ='+06:00', CAT ='+02:00', CCT ='+06:30', CDT ='-05:00', CEDT='+02:00', CEST='+02:00', CET ='+01:00', CHAST='+12:45', CIST='-08:00', CKT ='-10:00', CLST='-03:00', CLT ='-04:00', COST ='-04:00', COT ='-05:00', CST ='-06:00', CST ='+08:00', CVT ='-01:00', CXT ='+07:00', CHST='+10:00', DFT ='+01:00', EAST='-06:00', EAT ='+03:00', ECT ='-04:00', ECT ='-05:00', EDT ='-04:00', EEDT='+03:00', EEST ='+03:00', EET ='+02:00', EST ='-05:00', FJT ='+12:00', FKST='-03:00', FKT ='-04:00', GALT ='-06:00', GET ='+04:00', GFT ='-03:00', GILT='+12:00', GIT ='-09:00', GMT ='+00:00', GST ='-02:00', GYT ='-04:00', HADT='-09:00', HAST ='-10:00', HKT ='+08:00', HMT ='+05:00', HST ='-10:00', IRKT='+08:00', IRST ='+03:30', IST ='+05:30', IST ='+01:00', IST ='+02:00', JST ='+09:00', KRAT ='+07:00', KST ='+09:00', LHST='+10:30', LINT='+14:00', MAGT='+11:00', MDT ='-06:00', MIT ='-09:30', MSD ='+04:00', MSK ='+03:00', MST ='+08:00', MST ='-07:00', MST ='+06:30', MUT ='+04:00', NDT ='-02:30', NFT ='+11:30', NPT ='+05:45', NST ='-03:30', NT ='-03:30', OMST='+06:00', PDT ='-07:00', PETT ='+12:00', PHOT ='+13:00', PKT ='+05:00', PST ='-08:00', PST ='+08:00', RET ='+04:00', SAMT ='+04:00', SAST='+02:00', SBT ='+11:00', SCT ='+04:00', SLT ='+05:30', SST ='-11:00', SST ='+08:00', TAHT='-10:00', THA ='+07:00', UTC ='+00:00', UYST ='-02:00', UYT ='-03:00', VET ='-04:30', VLAT='+10:00', WAT ='+01:00', WEDT ='+01:00', WEST='+01:00', WET ='+00:00', YAKT='+09:00', YEKT ='+05:00', -- US Millitary (for RFC-822) Z='+00:00', A='-01:00', M='-12:00', N='+01:00', Y='+12:00', } local category = { ["no_parameters"]= "<!--[[Категория:Модуль:Calendar:Страницы без параметров]]-->", ["incomplete_parameters"]= "<!--[[Категория:Модуль:Calendar:Страницы с неполными или некорректными параметрами]]-->", ["without_verification"]= "<!--[[Категория:Модуль:Calendar:Страницы без проверки параметров]]-->", ["erroneous_parameters"]= "<!--[[Категория:Модуль:Calendar:Страницы с ошибочными параметрами]]-->" } -- несколько параметров передаются вместе с кодом ошибки в таблице, один может быть передан простым значением local e = { ["start"]="<span class=error>Ошибка: ", ["ending"]=".</span>", ["no_pattern_match"]="строка «%s» не совпадает с заданными паттернами", ["no_valid_date"]="дата «%s» не является корректной", ["wrong_jd"]="юлианская дата %s вне диапазона", ["no_data"]="нет входящих данных", ["too_many_arguments"]="ожидается менее %i аргументов", ["too_little_arguments"]="ожидается более %i аргументов", ["wrong_calculation"]="даты %s и %s не прошли проверку, %s дней разница", ["unknown_param"]="параметр %s неизвестен", ["unknown_error"]="неизвестная ошибка", ["tech_error"]="ошибка в функции %s", ["box_date"]="строка «%s» не является верной датой, пожалуйста, укажите дату в формате ГГГГ-ММ-ДД" -- [""]="", } local tzs_names = {"ACDT","ACST","ACT","ADT","AEDT","AEST","AFT","AKDT","AKST", "AMST","AMT","ART","AST","AST","AST","AST","AWDT","AWST","AZOST","AZT","BDT", "BIOT","BIT","BOT","BRT","BST","BST","BTT","CAT","CCT","CDT","CEDT","CEST", "CET","CHAST","CIST","CKT","CLST","CLT","COST","COT","CST","CST","CVT","CXT", "CHST","DFT","EAST","EAT","ECT","ECT","EDT","EEDT","EEST","EET","EST","FJT", "FKST","FKT","GALT","GET","GFT","GILT","GIT","GMT","GST","GYT","HADT","HAST", "HKT","HMT","HST","IRKT","IRST","IST","IST","IST","JST","KRAT","KST","LHST", "LINT","MAGT","MDT","MIT","MSD","MSK","MST","MST","MST","MUT","NDT","NFT", "NPT","NST","NT","OMST","PDT","PETT","PHOT","PKT","PST","PST","RET","SAMT", "SAST","SBT","SCT","SLT","SST","SST","TAHT","THA","UTC","UYST","UYT","VET", "VLAT","WAT","WEDT","WEST","WET","YAKT","YEKT","Z","A","M","N","Y","MSK"} local pattern = { -- для распознавания дат, переданных одним строчным параметром {"(-?%d%d%d%d?)[-%.%s/\\](%d%d)[-%.%s/\\](%d%d)", ["order"] = {3,2,1} }, -- yyyy mm dd {"(%d+)[-%.%s/\\](%d+)[-%.%s/\\](%d%d%d%d?)", ["order"] = {1,2,3} }, -- dd mm yyyy {"(%d%d)[-%.%s/\\](%d%d%d%d?)", ["order"] = {2,3} }, -- mm yyyy {"(%d%d%d%d?)[-%.%s/\\](%d%d)", ["order"] = {3,2} }, -- yyyy mm {"(%d+)%s(%l+)%s(%d%d%d%d?)", ["order"] = {1,2,3} }, -- d mmm y {"(%l+)%s(%d+),?%s(%d%d%d%d?)", ["order"] = {2,1,3} }, -- mmm d, y {"(%l+)%s(%d%d%d%d?)", ["order"] = {2,3} }, -- mmm y } local time_units = {"year","month","day"} --не используется --[[ local time_units = {"second", "minute", "hour", "day_of_month", "day_of_week", "day_of_year", "week", "month", "year", "year_of_century", "century"} ]]-- -- напоминание чтобы сделать более точные пересчёты - с часами / расчёт длительностей периодов local mnlang = {"ru_G", "ru_N", "en", "en_S", "de", "fr"} local month_lang = { ["ru_G"] = {"января","февраля","марта","апреля","мая","июня", "июля","августа","сентября","октября","ноября","декабря"}, ["ru_N"] = {"январь","февраль","март","апрель","май","июнь", "июль","август","сентябрь","октябрь","ноябрь","декабрь"}, ["en"] = {"january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"}, ["en_S"] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"}, ["de"] = {"januar", "februar", "märz", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "dezember"}, ["fr"] = {"janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"} } -- заполняется автоматически local reverse_month_lang = {} -- вспомогательная функция для обращения таблиц (смена ключей со значениями) local reverse_table = function (strait_table) local reversed_table = {} for k,v in pairs(strait_table) do reversed_table[v] = k end return reversed_table end -- запуск цикла по заполнению обратных таблиц, необходимых для распознавания дат local filling_months = function (mnlang, month_lang) for i=1, #mnlang do reverse_month_lang[mnlang[i]] = reverse_table(month_lang[mnlang[i]]) end end -- 10) Блок общих функций local function trim(str) if not str then return nil else return str:match'^()%s*$' and '' or str:match'^%s*(.*%S)' end end local function purif(str) if str == "" or str == nil then return nil elseif type(tonumber(str)) == "number" then return math.floor(tonumber(str)) else return nil end -- need .5 -- ,5 number format converter? end local function is(str) if (not str) or (str == "") then return false else return yesno(str,false) end end local function init(num) local output = {} for i=1,num do table.insert(output, {["year"]="", ["month"]="", ["day"]=""}) end return unpack(output) end local function isyear(tbl) if type(tbl) ~= 'table' then return false elseif not tbl["year"] then return false elseif type(tbl["year"]) == 'number' then return true else return false end end local function inbord(val, down, up) return not (type(up) ~= "number" or type(down) ~= "number" or type(val) ~= "number" or up < down or val < down or val > up) end local function shallowcopy(orig) local orig_type = type(orig) local copy if orig_type == 'table' then copy = {} for orig_key, orig_value in pairs(orig) do copy[orig_key] = orig_value end else -- number, string, boolean, etc copy = orig end return copy end local inlist = function ( var, list ) local n = #list local inlist = false for i=1,n do if var == list[i] then inlist = true end end return inlist end -- 20) Блок общих проверочных функций, связанных с датами local function unwarp(tbl) if not tbl then return "" elseif type(tbl) ~= "table" then return tbl elseif (tbl.day or tbl.month or tbl.year) then return (tbl.year or "?").."-"..(tbl.month or "?").."-"..(tbl.day or "?") else return (tbl[3] or "?").."-"..(tbl[2] or "?").."-"..(tbl[1] or "?") end end local function leap_year(y,jul) if (not y) or (type(y) ~= "number") then return false elseif (y % 4) ~= 0 then return false elseif not jul and (y % 100 == 0 and y % 400 ~= 0) then return false else return true end end -- функция для вычисления последнего дня месяца для юлианского и григорианского календарей local function month_end_day (month,year,is_julian) local month_end_day = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- если не задан год, дата 29 февраля считается допустимой if not month or type(month) ~= "number" or month < 1 or month > 12 then return nil elseif month ~= 2 or not year then return month_end_day[month] elseif month == 2 and (year % 4) == 0 and not ((not is_julian) and (year % 100 == 0 and year % 400 ~= 0)) then return 29 elseif month == 2 then return 28 else return nil -- в случае не целого значения входящих параметров или при иных непредусмотренных событиях end end local function isdate ( chain , jul ) -- можно использовать для проверки таблиц с полями day, month, year if not chain then return false elseif (not type(chain) == "table") or (not inbord(chain.year,-9999,9999)) or (not inbord(chain.month,1,12)) or (not inbord(chain.day,1,31)) or chain.day > monthd[chain.month] -- or chain.year == 0 then return false elseif chain.month == 2 and chain.day == 29 and not leap_year(chain.year,jul) then return false else return true end -- check for other calendars needed? end local function ispartdate ( chain ) if not chain then return false elseif not (type(chain) == "table") then return false elseif (inbord(chain.year,-9999,9999) or inbord(chain.month,1,12) or inbord(chain.day,1,31)) then return true else return false end -- partial date -- more detailed check for 31.02.0000 needed -- check for other calendars needed end -- from date1 to date2 in one year (beetwen jan-dec, dec-jan needed) local function partdist(date1,date2) local mont, dist = 0, 0 local d1d, d1m, d2d, d2m = (date1["day"] or ""), (date1["month"] or ""),(date2["day"] or ""), (date2["month"] or "") if not (inbord(d1d,1,31) and inbord(d2d,1,31)) then return false end -- нужна доп. проверка частичных дат на корректность if (inbord(d1m,1,12) or inbord(d2m,1,12)) and (d1m == "" or d2m == "") then mont = purif(date1["month"] or date2["month"]) d1m, d2m = mont, mont end -- mw.log("📏 day: " ..d1d .."->"..d2d.." month: ".. d1m.."->"..d2m ) if (inbord(d1m,1,12) and d1d <= monthd[d1m]) and (inbord(d2m,1,12) and d2d <= monthd[d2m]) then if d2m == d1m then dist = d2d - d1d else dist = monthd[d1m] - d1d + d2d end return dist else return math.huge end end local function dmdist(d1,d2) local p1,p2 = math.huge,math.huge if not not partdist(d1,d2) then p1=partdist(d1,d2) end if not not partdist(d2,d1) then p1=partdist(d2,d1) end -- if (not p1) or (not p2) then -- return (p1 or "") .. (p2 or "") -- else -- mw.log("d1, d2 = " .. undate(d1) .. ", " .. undate(d2)) return math.min(tonumber(partdist(d1,d2)) or math.huge,tonumber(partdist(d2,d1)) or math.huge) -- end end -- 30) Блок функций для обработки ввода-вывода дат local function undate(tbl) if not tbl then return "" else return (tbl.year or "").."-"..(tbl.month or "").."-"..(tbl.day or "") end end -- функция для нормализации значений дат и перевода месяцев в числа local function numerize(str) if type(str) == "number" then return math.floor(str) elseif str == "" or str == nil or type(str) ~= "string" then return nil elseif type(tonumber(str)) == "number" then return math.floor(tonumber(str)) else for i=1, #mnlang do if inlist(mw.ustring.lower(str),month_lang[mnlang[i]]) then return reverse_month_lang[mnlang[i]][mw.ustring.lower(str)] end end end end -- функция распознавания даты, переданной одной строкой local function parse_date(date_string) if type(date_string) ~= "string" or date_string == "" then return nil end local out_date_str = {"","",""} local error_data = {} for i=1, #pattern do local result_1, result_2, result_3 = mw.ustring.match(mw.ustring.lower(date_string),pattern[i][1]) if (result_1 or "") > "" then out_date_str[pattern[i].order[1]] = result_1 out_date_str[pattern[i].order[2]] = result_2 if (pattern[i].order[3]) then out_date_str[pattern[i].order[3]] = result_3 end -- mw.log("Паттерн " .. i .. ", строка: " .. date_string) break end end local date = { ["day"] =numerize(out_date_str[1]), ["month"]=numerize(out_date_str[2]), ["year"] =numerize(out_date_str[3])} return date --, error_data end ----[[ УСТАРЕЛО ]]---- local numstr2date = function(numstr) local format = "Y-m-d" local iso_date = mwlang:formatDate(format,numstr) local y,m,d = string.match(iso_date, "(%d+)-(%d+)-(%d+)") local dateout = {["year"]=purif(y), ["month"]=purif(m), ["day"]=purif(d)} return dateout end --local numstr2date = function(numstr) -- local nums = {} -- local dateout = {} -- for num in string.gmatch(numstr,"(%d+)") do -- table.insert(nums,purif(num)) -- end -- if #nums ~= 3 then error("В поле даты вместо трёх чисел с разделителями указано " .. #nums) -- elseif not inbord(nums[2],1,12) then error("Месяц с номером " .. nums[2] .. " не найден") -- elseif not inbord(nums[3],1,31) then -- dateout = {["year"]=nums[3], ["month"]=nums[2], ["day"]=nums[1]} -- elseif not inbord(nums[1],1,31) then -- dateout = {["year"]=nums[1], ["month"]=nums[2], ["day"]=nums[3]} -- elseif inbord(nums[1],1,31) then -- dateout = {["year"]=nums[3], ["month"]=nums[2], ["day"]=nums[1]} -- else -- local mwlang = mw.getContentLanguage() -- implement mwlang:formatDate(format,datein,true) here -- return error("Не распознано " .. numstr .. " как дата") -- end -- return dateout --end local function year2lang(numyear,yearmark,wiki) if not numyear then return "" end if not yearmark then yearmark = "" end local output = "" local bcmark = " до н. э." if numyear > 0 then bcmark = "" else numyear = 1 - numyear end if wiki then -- output = tCon({'[[', numyear,' год',bcmark,'|', numyear,']]', " ", yearmark, " ", bcmark}) output = tCon({'[[', numyear,' год',bcmark,'|', trim(numyear .. " " .. yearmark .. " " .. bcmark), ']]'}) else output = tCon({numyear, " ", yearmark, bcmark}) end return trim(output) end local function day2lang(datein,wikidate,wiki,inner_brt) -- if not isdate(wikidate) then wiki = false end if not ispartdate(datein) then return "" end local dm_separ, output = "", nil if (not (not datein.day)) and (not (not datein.month)) then dm_separ = " " end if (not datein.month) then datein.month = "" end if (not datein.day) then datein.day = "" end local monlan = monthlang[datein.month] or "" if wiki and not inner_brt then output = tCon({"[[", wikidate.day, " ", monthlang[wikidate.month] or "", "|", (datein.day or ""), dm_separ, monlan, "]]"}) elseif wiki then output = tCon({"[[", wikidate.day, " ", monthlang[wikidate.month] or "", "|", (datein.day or ""), dm_separ, monlan}) else output = tCon({datein.day, dm_separ, monlan}) end return trim(output) end local function triple_txt2date(d,m,y) -- добавить (args[1]:match("(%a+)") or "-") для нестандартной записи -- mw.ustring.match((m or ""),"(%a+)") local msg = "" local year = purif((y or "-"):match("(%d+)")) local month = purif(month_to_num[string.lower(mw.ustring.match((m or ""),"(%a+)"))]) local day = purif((d or "-"):match("(%d+)")) if not month then msg = category.incomplete_parameters month = purif(month_to_num[string.lower(mw.ustring.match((d or ""),"(%a+)") or "-")]) end if (not day) and ((purif(string.match(m or "","(%d+)") or "") or 32) <= (monthd[month] or 31)) then msg = category.incomplete_parameters day = purif(m:match("(%d+)") or "") end if not year then msg = category.incomplete_parameters year = purif(string.match(m or "","(%d+)") or "") end local dateout = {["year"]=year, ["month"]=month, ["day"]=day, ["msg"]=msg} return dateout end local function glue(d1,m1,y1,d2,m2,y2) if (not d1) and (not m1) and (not y1) and (not d2) and (not m2) and (not y2) then return category.incomplete_parameters end local gd,gm,gy,jd,jm,jy = (d1 or ""), (m1 or ""), (y1 or ""), (d2 or ""), (m2 or ""), (y2 or "") --mw.log(tCon({gd,gm,gy,jd,jm,jy})) local gm_sep = {" [["," год|","]]"} if (not gy) or (gy == "") then gm_sep = {"","",""} end return tCon({comment[1],trim(trim(jd .. " " .. jm) .. " " .. jy ), comment[2]," ([[",trim(gd .. " " .. gm),"]]",gm_sep[1],(gy:match("(%d+)") or ""), gm_sep[2],gy,gm_sep[3],")",category.incomplete_parameters}) end -- добавить отображение без года local function double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark) local msg = "" msg = (jdate.msg or "") .. (gdate.msg or "") local cd = {} local jd = shallowcopy(jdate) local gd = shallowcopy(gdate) local left = "(" local right = ")" if sq_brts then left = "&#091;" right = "&#093;" end if (not isdate(jdate,true)) then return error((jdate.day or "") .. "." .. (jdate.month or "") .."." .. (jdate.year or "") .. " неподходящая дата") elseif (not isdate(gdate)) then return error((gdate.day or "") .. "." .. (gdate.month or "") .."." .. (gdate.year or "") .. " неподходящая дата") end if jd.year == gd.year then cd.year = gd.year gd.year, jd.year = nil, nil end if jd.month == gd.month then cd.month = gd.month gd.month, jd.month = nil, nil end if (not not cd.month) and wm then return tCon({comment[1] .. trim(day2lang(jd,jdate,false) .. " " .. year2lang(jd.year,yearmark,false)) .. comment[2], trim(left .. day2lang(gd,gdate,wd,wm) .. " " .. year2lang(gd.year,yearmark,wy)) .. right, day2lang(cd,gdate,false) .. "]]", trim(year2lang(cd.year,yearmark,wy)..msg)}, " ") end return tCon({comment[1] .. trim(day2lang(jd,jdate,false) .. " " .. year2lang(jd.year,yearmark,false)) .. comment[2], trim(left .. day2lang(gd,gdate,wd) .. " " .. year2lang(gd.year,yearmark,wy)) .. right, trim(day2lang(cd,gdate,false)), trim(year2lang(cd.year,yearmark,wy)..msg)}, " ") end -- 40) Блок функций для перевода дат с использованием [[Юлианская дата]] local function gri2jd( datein ) if not isdate(datein) then return error((datein.day or "") .. "." .. (datein.month or "") .."." .. (datein.year or "") .. " неподходящая дата") end local year = datein.year local month = datein.month local day = datein.day -- jd calculation local a = math.floor((14 - month)/12) local y = year + 4800 - a local m = month + 12*a - 3 local offset = math.floor(y/4) - math.floor(y/100) + math.floor(y/400) - 32045 local jd = day + math.floor((153*m + 2)/5) + 365*y + offset -- jd validation local low, high = -1931076.5, 5373557.49999 if not (low <= jd and jd <= high) then return error((datein.day or "") .. "." .. (datein.month or "") .. "." .. (datein.year or "") .. " выходит за пределы разрешённого диапазона") end return jd end local function jd2jul( jd ) if type(jd) ~= "number" then return error("Промежуточная переменная " .. (jd or "") .. " не является числом") end -- calendar date calculation local c = jd + 32082 local d = math.floor((4*c + 3)/1461) local e = c - math.floor(1461*d/4) local m = math.floor((5*e + 2)/153) local year_out = d - 4800 + math.floor(m/10) local month_out = m + 3 - 12*math.floor(m/10) local day_out = e - math.floor((153*m + 2)/5) + 1 -- output local dateout = {["year"]=year_out, ["month"]=month_out, ["day"]=day_out} return dateout end local function jul2jd( datein ) if not isdate(datein,true) then return error((datein.day or "") .. "." .. (datein.month or "") ..".".. (datein.year or "") .. " неподходящая дата") end local year = datein.year local month = datein.month local day = datein.day -- jd calculation local a = math.floor((14 - month)/12) local y = year + 4800 - a local m = month + 12*a - 3 local offset = math.floor(y/4) - 32083 local jd = day + math.floor((153*m + 2)/5) + 365*y + offset -- jd validation local low, high = -1930999.5, 5373484.49999 if not (low <= jd and jd <= high) then return error((datein.day or "") .. "." .. (datein.month or "") .."." .. (datein.year or "") .. " выходит за пределы разрешённого диапазона") end return jd end local function jd2gri( jd ) if type(jd) ~= "number" then return error("Промежуточная переменная " .. (jd or "") .. " не является числом") end -- calendar date calculation local a = jd + 32044 local b = math.floor((4*a + 3) / 146097) local c = a - math.floor(146097*b/4) local d = math.floor((4*c+3)/1461) local e = c - math.floor(1461*d/4) local m = math.floor((5*e+2)/153) local day_out = e - math.floor((153*m+2)/5)+1 local month_out = m + 3 - 12*math.floor(m/10) local year_out = 100*b + d - 4800 + math.floor(m/10) -- output local dateout = {["year"]=year_out, ["month"]=month_out, ["day"]=day_out} return dateout end local function astroyear(num, bc) if not num then return error() elseif type(num) ~= "number" then return error() end if num < 1 then return num end if not bc then return num else return 1 - num end end local function recalc(datein,calend) if inlist(calend,params[1]) then return jd2jul(gri2jd(datein)), datein elseif inlist(calend,params[2]) then return datein, jd2gri(jul2jd(datein)) else error("Параметр " .. (calend or "") .. " не опознан, разрешённые: " .. tCon(params[1]," ") .. " и " .. tCon(params[2]," ")) end end -- 50) Функции для обработки UTC local function utc(str,margin) local d = 1 local dchar = "+" local beginning = "[[UTC" local ending = "]]" local cat = "" local nums = {} local hmarg, timedec = 0, 0 local mmarg = "00" local output = "" -- checking type of input if not margin then margin = 0 elseif type(tonumber(margin)) ~= 'number' then output = "Can't shift by " .. margin error(output) end if type(str) ~= 'string' then error("Нет входящей строки") elseif str:byte(1) == 43 then elseif inbord(str:byte(1),48,57) then cat = "[[Категория:Википедия:Ошибка в часовом поясе НП]]" elseif str:byte(1) == 45 or string.sub(str,1,3) == "−" or string.sub(str,1,1)=="-" then d = -1 else error(string.char(str:byte(1)) .. " недопустимый первый символ") end -- parsing input for num in string.gmatch(str,"(%d+)") do table.insert(nums,purif(num)) end if #nums > 2 then error("Ожидается всего 2 числа, а не " .. #nums) elseif #nums == 0 then error("Необходимо что-то ввести") elseif #nums == 1 then if inbord(nums[1],0,14) then timedec = d*nums[1] + margin else error("Только часы от -14 до 14") end elseif #nums == 2 then if not inbord(nums[1],0,14) then error("Только часы от -14 до 14") elseif not inbord(nums[2],0,59) then error("Минуты только от 0 до 59") else timedec = d*(nums[1] + nums[2]/60) + margin end end if tonumber(timedec) == purif(timedec) then hmarg = timedec else local h, m = math.modf(math.abs(timedec)) hmarg = h mmarg = math.floor(m*60) end if timedec == 0 then dchar = "±" elseif timedec > 0 then elseif timedec < 0 then dchar = "&minus;" end -- output output = beginning .. dchar .. math.abs(hmarg) .. ":" .. string.format("%02d",mmarg) .. ending .. cat return output end -- 60) Блок функций ввода-вывода function p.NthDay( frame ) local args = getArgs(frame, { frameOnly = true }) local num, wday, mont, yea, format = purif(args[1]), purif(args[2]), purif(args[3]), purif(args[4]), args[5] if not format then format = "%d.%m.%y" end if not inbord(num,-5,5) then return error("The number must be between -5 and 5") elseif num == 0 then return error("The number must not be zero") end if not inbord(wday,0,6) then return error("The day of the week must be between 0 and 6") end if not inbord(mont,1,12) then return error("The month must be between 1 and 12") end if not inbord(yea,0,9999) then return error("Wrong year number") end if inbord(num,1,5) then local m_start = os.time{year=yea, month=mont, day=1, hour=0} local m_wds = tonumber(os.date("%w", m_start)) local start_shift = ( (num - bool_to_number[wday >= m_wds]) * 7 - (m_wds - wday) ) * 24 * 60 * 60 local tim = m_start + start_shift if tonumber(os.date("%m", tim)) == mont then return (os.date(format, tim)) else return (err) end elseif inbord(num,-5,-1) then local m_end = os.time{year = yea, month = mont + 1, day = 1, hour = 0} - 24 * 60 * 60 local m_wde = tonumber(os.date("%w", m_end)) local end_shift = ((math.abs(num + 1) + bool_to_number[wday > m_wde]) * 7 + (m_wde - wday)) * 24 * 60 * 60 local tim = m_end - end_shift if tonumber(os.date("%m", tim)) == mont then return (os.date(format, tim)) else return (err) end end end -- =p.ToIso(mw.getCurrentFrame():newChild{title="smth",args={"12 декабря 2020"}}) -- =p.ToIso(mw.getCurrentFrame():newChild{title="smth",args={"1.2.1602"}}) -- =p.ToIso(mw.getCurrentFrame():newChild{title="smth",args={"12.12.2021"}}) -- =p.ToIso(mw.getCurrentFrame():newChild{title="smth",args={"2021.12.12"}}) function p.ToIso( frame ) local args = getArgs(frame, { frameOnly = true }) local datein = args[1] -- инициализация, заполнение обратных таблиц, копирование параметров filling_months(mnlang, month_lang) -- парсинг входящей даты по шаблону local date = parse_date(datein) if not (type(date.year) == 'number') then return ("Wrong year: " .. unwarp(date)) end if not (1 <= date.month and date.month <= 12) then return ("Wrong month: " .. unwarp(date)) end if not date.day or not (1 <= date.day and date.day <= month_end_day(date.month,date.year)) then return ("Wrong day: " .. unwarp(date)) end local timedate = os.time{year=date.year, month=date.month, day=date.day} local date = os.date("%Y-%m-%d", timedate) return date end -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"12 декабря 2020"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"1.2.1602"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"декабрь 2020"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"12-2020"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"12.12.2021"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"2021.12.12"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"2021.11"}}) -- =p.BoxDate(mw.getCurrentFrame():newChild{title="smth",args={"11.2021"}}) function p.BoxDate( frame ) local args = getArgs(frame, { frameOnly = true }) local txtDateIn, strFormat = args[1], args[2] local txtDateOut, date, status = p.bxDate(txtDateIn, strFormat, params) if status.brk then return error(status.errorText) else return txtDateOut end end function p.bxDate( txtDateIn , strFormat, params ) -- к отладке local txtDateOut, date, status = "", {}, {brk = false, errorCat = "", errorText = ""} strFormat = strFormat or "j xg Y" -- заглушка - таблица параметров на будущее params = params or {} if not txtDateIn then status.errorText = e.no_data status.errorCat = category.no_parameters status.brk = true else -- заполнение служебных таблиц filling_months(mnlang, month_lang) end if not status.brk then -- парсинг входящей даты по шаблону date = parse_date(txtDateIn) -- заменить сообщения об ошибках на списочные if not (date.year and type(date.year) == 'number') then status.errorText = string.format(e.box_date,txtDateIn) status.errorCat = category.incomplete_parameters status.brk = true end if not inbord(date.month,1,12) then status.errorText = string.format(e.box_date,txtDateIn) status.errorCat = category.incomplete_parameters status.brk = true end if not date.day and string.find(strFormat,"[dDjlNwzW]") then strFormat = trim(string.gsub(string.gsub(strFormat,"xg","F"),"[dDjlNwzW]","")) elseif not date.day then elseif not inbord(date.day,1,month_end_day(date.month,date.year)) then status.errorText = string.format(e.box_date,txtDateIn) status.errorCat = category.incomplete_parameters status.brk = true end end if not status.brk then txtDateOut = mwlang:formatDate(strFormat,tCon({date.year,date.month,date.day},"-"),true) end return txtDateOut, date, status end function p.ToDate( frame ) -- возможно неиспользуемая local args = getArgs(frame, { frameOnly = true }) local mwlang = mw.getContentLanguage() local datein = args[1] local format = "j xg Y" if not string.match(datein, "%p") then return datein elseif not args[2] then else format = args[2] end return mwlang:formatDate(format,datein,true) end -- =p.unitime(mw.getCurrentFrame():newChild{title="smth",args={"−1:30","1"}}) function p.unitime( frame ) local args = getArgs(frame, { frameOnly = true }) local DST = 0 if not args[2] then else DST = 1 end local utcin = "" local input = args[1] if not input then return "" end if inlist(input:upper(),tzs_names) then utcin = known_tzs[input:upper()] elseif (string.sub(input:upper(),1,3) == 'UTC') and (string.len(input) < 10) then utcin = string.sub(input,4) else if string.sub(input,1,1) == '[' or string.sub(input,1,1) == '{' or string.sub(input,1,1):upper() == 'U' or string.sub(input,1,1):upper() == 'M' then return input -- elseif not string.find(string.upper(string.sub(input,1,1)),"[\65-\90]") or -- not string.find(string.upper(string.sub(input,1,1)),"[\192-\223]") then -- return input else utcin = input end end -- elseif string.sub(input,1,3) ~= "−" then utcin = input -- or not (not input:find("[А-я]")) при наличии в строке юникода не работает local output = "" if DST == 0 then output = utc(utcin) else output = utc(utcin) .. ", [[летнее время|летом]] " .. utc(utcin,DST) end return output end -- УСТАРЕЛО -- =p.OldDate(mw.getCurrentFrame():newChild{title="smth",args={"20.02.2020","ю",["bc"]="1",["wd"]="1",["wy"]="1",["sq_brts"]="1",["yearmark"]="г."}}) function p.OldDate( frame ) local args = getArgs(frame, { frameOnly = true }) if not args[1] then return err end local gdate, jdate = {}, {} local strin = args[1] local cal = args[2]:lower() or "г" local bc = is(args["bc"]) local wd = is(args["wd"]) local wm = is(args["wm"]) local wy = is(args["wy"]) if not wd then wm = false end local sq_brts = is(args["sq_brts"]) local yearmark = "года" if yesno(args["yearmark"]) then elseif yesno(args["yearmark"]) == false then yearmark = "" else yearmark = trim(args["yearmark"]) or "года" end -- local infocard = is(args["infocard"]) -- local catName = args["catName"] or false local datein = numstr2date(strin) datein.year = astroyear(datein.year, bc) jdate, gdate = recalc(datein,cal) return double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark) end -- =p.NewDate(mw.getCurrentFrame():newChild{title="Salt",args={"2020-02-20"}}) -- =p.NewDate(mw.getCurrentFrame():newChild{title="smth",args={"20.02.2020","ю",["bc"]="1",["wd"]="1",["wy"]="1",["sq_brts"]="1",["yearmark"]="г."}}) -- =p.NewDate(mw.getCurrentFrame():newChild{title="smth",args={"20.02.2020",["bc"]="0",["wd"]="1",["wy"]="1",["sq_brts"]="0",["yearmark"]=""}}) function p.NewDate( frame ) local args = getArgs(frame, { frameOnly = true }) if not args[1] then return err end local strin = args[1] local year, month, day if not not strin:match( "(-?%d%d%d%d%d)-(%d%d)-(%d%d)" ) then year, month, day = strin:match( "(-?%d%d%d%d%d)-(%d%d)-(%d%d)" ) elseif not not strin:match( "(-?%d+)-(%d+)-(%d+)" ) then year, month, day = strin:match( "(-?%d+)-(%d+)-(%d+)" ) elseif not not strin:match( "(%d%d)%.(%d%d)%.(-?%d%d%d%d%d)" ) then day, month, year = strin:match( "(%d%d)%.(%d%d)%.(-?%d%d%d%d%d)" ) elseif not not strin:match( "(%d+)%.(%d+)%.(-?%d+)" ) then day, month, year = strin:match( "(%d+)%.(%d+)%.(-?%d+)" ) end if not year then return error(args[1] .. " не подходит под форматы yyyy-mm-dd или dd.mm.yyyy") end local cal = "г" if (not args[2]) or (args[2] == "") then cal = "г" else cal = args[2]:lower() end local bc,wd,wm,wy,sq_brts = is(args["bc"]), is(args["wd"]), is(args["wd"]) and is(args["wm"]), is(args["wy"]), is(args["sq_brts"]) year = astroyear(purif(year),bc) local datein = {["year"]=purif(year), ["month"]=purif(month), ["day"]=purif(day)} local jdate, gdate = recalc(datein,cal) local yearmark = "года" local ym = args["yearmark"] or "" if yesno(ym) then elseif yesno(ym) == false then yearmark = "" else if not not ym:match("(%d+)") then error("Цифры в обозначении года: " .. ym) else yearmark = trim(ym) or "года" end end return double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark) end -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"3","июня",nil,"21","мая"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"28 августа","","1916 года","15"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"3","июня","1900","21","мая"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"6","июня","1889 год","25","мая"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"28","ноября","1917","15"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"28 августа","nil","1916 года","15"}}) -- =p.Test(mw.getCurrentFrame():newChild{title="smth",args={"4","января","1915","22","декабря","1914 года"}}) -- {{OldStyleDate|день (НС)|месяц (НС)|год (НС)|день (СС)|месяц (СС)|год (СС)}} function p.Test( frame ) local args = getArgs(frame, { frameOnly = true }) -- необходима проверка и замена nil на " " --[[mw.log((args[1] or "") .. " " .. (args[2] or "") .. " " .. (args[3] or "") .. " " .. (args[4] or "") .. " " .. (args[5] or "") .. " " .. (args[6] or "")) ]]-- local ingdate = triple_txt2date(args[1],args[2],args[3]) local injdate = triple_txt2date(args[4],args[5],args[6]) local j1date, g1date, j2date, g2date = init(4) mw.log("ingdate-".. (undate(ingdate) or "")) mw.log("injdate-".. (undate(injdate) or "")) local bc,wd,wm,wy,sq_brts,ny = is(args["bc"]), is(args["wd"]), is(args["wd"]) and is(args["wm"]), is(args["wy"]), is(args["sq_brts"]), is(args["ny"]) -- подавление формата для локальных тестов local wd, wm, wy = true, true, true local yearmark = "года" local ym = args["yearmark"] or ((mw.ustring.match((args[3] or ""),"(%a+)") or mw.ustring.match((args[6] or ""),"(%a+)")) or "") -- mw.log("ym " .. ym) if yesno(ym) then elseif yesno(ym) == false then yearmark = "" else if not not ym:match("(%d+)") then error("Цифры в обозначении года: " .. ym) else yearmark = trim(ym) or "года" end end if isdate(ingdate) or isdate(injdate) then if isdate(ingdate) then j1date, g1date = recalc(ingdate,"g") ingdate["full"] = true end if isdate(injdate) then j2date, g2date = recalc(injdate,"j") injdate["full"] = true end if ispartdate(ingdate) and ispartdate(injdate) then mw.log("📏 " .. dmdist(ingdate,injdate)) mw.log("📏 " .. dmdist(j1date,g1date)) mw.log("📏 " .. dmdist(j2date,g2date)) mw.log("📏 " .. dmdist(ingdate,g1date)) mw.log("📏 " .. dmdist(injdate,j2date)) end end if ny then if isyear(j1date) then else j1date["year"] = "" end if isyear(j2date) == nil then else j2date["year"] = "" end if isyear(g1date) == nil then else g1date["year"] = "" end if isyear(g2date) == nil then else g2date["year"] = "" end end if (isdate(j1date) and isdate(g1date) and isdate(j2date) and isdate(g2date)) then if ((j1date.year == j2date.year) and (j1date.month == j2date.month) and (j1date.day == j2date.day)) then return double_couple(j1date, g1date, wd, wm, wy, sq_brts, yearmark) else mw.log("📏 " .. (tostring(dmdist(ingdate,injdate)) or "")) return glue(args[1],args[2],args[3],args[4],args[5],args[6]) -- категория (предположительная разница в днях) и частичный вывод end elseif isdate(j1date) and isdate(g1date) then return double_couple(j1date, g1date, wd, wm, wy, sq_brts, yearmark) -- категория плюс частичная проверка elseif isdate(j2date) and isdate(g2date) then return double_couple(j2date, g2date, wd, wm, wy, sq_brts, yearmark) -- категория плюс частичная проверка elseif (ispartdate(ingdate) and ispartdate(injdate)) then mw.log("ingdate ".. (undate(ingdate) or "")) mw.log("injdate ".. (undate(injdate) or "")) mw.log("j1date " .. (undate(j1date ) or "")) mw.log("j2date " .. (undate(j2date ) or "")) mw.log("g1date " .. (undate(g1date ) or "")) mw.log("g2date " .. (undate(g2date ) or "")) mw.log("📏 " .. (tostring(partdist(ingdate,injdate)) or "").. " — " .. (tostring(partdist(injdate,ingdate)) or "")) return glue(args[1],args[2],args[3],args[4],args[5],args[6]) -- частичный или полный вывод, категория else mw.log("ingdate ".. (undate(ingdate) or "")) mw.log("injdate ".. (undate(injdate) or "")) mw.log("j1date " .. (undate(j1date ) or "")) mw.log("j2date " .. (undate(j2date ) or "")) mw.log("g1date " .. (undate(g1date ) or "")) mw.log("g2date " .. (undate(g2date ) or "")) return err .. category.incomplete_parameters end end return p </textarea><div id="mw-scribunto-console"></div><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p>Шаблоны, используемые на этой странице: </p></div><ul> <li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/begin" title="Шаблон:Doc/begin">Шаблон:Doc/begin</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/begin&action=edit" title="Шаблон:Doc/begin">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/end" title="Шаблон:Doc/end">Шаблон:Doc/end</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/end&action=edit" title="Шаблон:Doc/end">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/styles.css" title="Шаблон:Doc/styles.css">Шаблон:Doc/styles.css</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Doc/styles.css&action=edit" title="Шаблон:Doc/styles.css">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Join" title="Шаблон:Join">Шаблон:Join</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Join&action=edit" title="Шаблон:Join">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Module_other" title="Шаблон:Module other">Шаблон:Module other</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Module_other&action=edit" title="Шаблон:Module other">посмотреть исходный код</a>) (частично защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Module_rating" class="mw-redirect" title="Шаблон:Module rating">Шаблон:Module rating</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Module_rating&action=edit" class="mw-redirect" title="Шаблон:Module rating">посмотреть исходный код</a>) (частично защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Ombox" title="Шаблон:Ombox">Шаблон:Ombox</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Ombox&action=edit" title="Шаблон:Ombox">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_left" title="Шаблон:Str left">Шаблон:Str left</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_left&action=edit" title="Шаблон:Str left">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_len" title="Шаблон:Str len">Шаблон:Str len</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_len&action=edit" title="Шаблон:Str len">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_rightc" title="Шаблон:Str rightc">Шаблон:Str rightc</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_rightc&action=edit" title="Шаблон:Str rightc">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub" title="Шаблон:Str sub">Шаблон:Str sub</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub&action=edit" title="Шаблон:Str sub">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Tl" title="Шаблон:Tl">Шаблон:Tl</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Tl&action=edit" title="Шаблон:Tl">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U" title="Шаблон:U">Шаблон:U</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U&action=edit" title="Шаблон:U">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno" title="Шаблон:Yesno">Шаблон:Yesno</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&action=edit" title="Шаблон:Yesno">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno-yes" title="Шаблон:Yesno-yes">Шаблон:Yesno-yes</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno-yes&action=edit" title="Шаблон:Yesno-yes">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82" title="Шаблон:Выполнить скрипт">Шаблон:Выполнить скрипт</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82&action=edit" title="Шаблон:Выполнить скрипт">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B" title="Шаблон:Действия для страницы">Шаблон:Действия для страницы</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B&action=edit" title="Шаблон:Действия для страницы">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B/styles.css" title="Шаблон:Действия для страницы/styles.css">Шаблон:Действия для страницы/styles.css</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B/styles.css&action=edit" title="Шаблон:Действия для страницы/styles.css">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C_%D0%BA%D1%8D%D1%88" title="Шаблон:Очистить кэш">Шаблон:Очистить кэш</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C_%D0%BA%D1%8D%D1%88&action=edit" title="Шаблон:Очистить кэш">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A0%D0%B5%D0%B9%D1%82%D0%B8%D0%BD%D0%B3_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F" title="Шаблон:Рейтинг модуля">Шаблон:Рейтинг модуля</a> (<a href="/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A0%D0%B5%D0%B9%D1%82%D0%B8%D0%BD%D0%B3_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&action=edit" title="Шаблон:Рейтинг модуля">посмотреть исходный код</a>) (частично защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments">Модуль:Arguments</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&action=edit" title="Модуль:Arguments">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" title="Модуль:Calendar">Модуль:Calendar</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&action=edit" title="Модуль:Calendar">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar/doc" title="Модуль:Calendar/doc">Модуль:Calendar/doc</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar/doc&action=edit" title="Модуль:Calendar/doc">править</a>) </li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler" title="Модуль:Category handler">Модуль:Category handler</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler&action=edit" title="Модуль:Category handler">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/blacklist" title="Модуль:Category handler/blacklist">Модуль:Category handler/blacklist</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/blacklist&action=edit" title="Модуль:Category handler/blacklist">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/config" title="Модуль:Category handler/config">Модуль:Category handler/config</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/config&action=edit" title="Модуль:Category handler/config">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/data" title="Модуль:Category handler/data">Модуль:Category handler/data</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/data&action=edit" title="Модуль:Category handler/data">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/shared" title="Модуль:Category handler/shared">Модуль:Category handler/shared</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Category_handler/shared&action=edit" title="Модуль:Category handler/shared">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box" title="Модуль:Message box">Модуль:Message box</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box&action=edit" title="Модуль:Message box">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/configuration" title="Модуль:Message box/configuration">Модуль:Message box/configuration</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/configuration&action=edit" title="Модуль:Message box/configuration">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/ombox.css" title="Модуль:Message box/ombox.css">Модуль:Message box/ombox.css</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/ombox.css&action=edit" title="Модуль:Message box/ombox.css">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Namespace_detect/config" title="Модуль:Namespace detect/config">Модуль:Namespace detect/config</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Namespace_detect/config&action=edit" title="Модуль:Namespace detect/config">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Namespace_detect/data" title="Модуль:Namespace detect/data">Модуль:Namespace detect/data</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Namespace_detect/data&action=edit" title="Модуль:Namespace detect/data">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Separated_entries" title="Модуль:Separated entries">Модуль:Separated entries</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Separated_entries&action=edit" title="Модуль:Separated entries">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String" title="Модуль:String">Модуль:String</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String&action=edit" title="Модуль:String">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableTools" title="Модуль:TableTools">Модуль:TableTools</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableTools&action=edit" title="Модуль:TableTools">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Template_call_code" title="Модуль:Template call code">Модуль:Template call code</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Template_call_code&action=edit" title="Модуль:Template call code">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Template_call_code/styles.css" title="Модуль:Template call code/styles.css">Модуль:Template call code/styles.css</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Template_call_code/styles.css&action=edit" title="Модуль:Template call code/styles.css">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Yesno" title="Модуль:Yesno">Модуль:Yesno</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Yesno&action=edit" title="Модуль:Yesno">посмотреть исходный код</a>) (защищено)</li><li><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0/Carn/Calendar" title="Модуль:Песочница/Carn/Calendar">Модуль:Песочница/Carn/Calendar</a> (<a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0/Carn/Calendar&action=edit" title="Модуль:Песочница/Carn/Calendar">посмотреть исходный код</a>) (частично защищено)</li></ul></div><p id="mw-returnto">Возврат к странице <a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" title="Модуль:Calendar">Модуль:Calendar</a>.</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Источник — <a dir="ltr" href="https://ru.wikipedia.org/wiki/Модуль:Calendar">https://ru.wikipedia.org/wiki/Модуль:Calendar</a></div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </div> <div id="mw-navigation"> <h2>Навигация</h2> <div id="mw-head"> <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" > <h3 id="p-personal-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Персональные инструменты</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anonuserpage" class="mw-list-item"><span title="Страница участника для моего IP">Вы не представились системе</span></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%9C%D0%BE%D1%91_%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5" title="Страница обсуждений для моего IP [n]" accesskey="n"><span>Обсуждение</span></a></li><li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%9C%D0%BE%D0%B9_%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4" title="Список правок, сделанных с этого IP-адреса [y]" accesskey="y"><span>Вклад</span></a></li><li id="pt-createaccount" class="mw-list-item"><a href="/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C_%D1%83%D1%87%D1%91%D1%82%D0%BD%D1%83%D1%8E_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C&returnto=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACalendar&returntoquery=action%3Dedit" title="Мы предлагаем вам создать учётную запись и войти в систему, хотя это и не обязательно."><span>Создать учётную запись</span></a></li><li id="pt-login" class="mw-list-item"><a href="/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D1%85%D0%BE%D0%B4&returnto=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACalendar&returntoquery=action%3Dedit" title="Здесь можно зарегистрироваться в системе, но это необязательно. [o]" accesskey="o"><span>Войти</span></a></li> </ul> </div> </nav> <div id="left-navigation"> <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-namespaces-label" > <h3 id="p-namespaces-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Пространства имён</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected mw-list-item"><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" title="Просмотреть страницу модуля [c]" accesskey="c"><span>Модуль</span></a></li><li id="ca-talk" class="mw-list-item"><a href="/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F:Calendar" rel="discussion" title="Обсуждение основной страницы [t]" accesskey="t"><span>Обсуждение</span></a></li> </ul> </div> </nav> <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-variants-label" > <input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-menu-checkbox" aria-labelledby="p-variants-label" > <label id="p-variants-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">English</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> </div> <div id="right-navigation"> <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-views-label" > <h3 id="p-views-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Просмотры</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="mw-list-item"><a href="/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar"><span>Читать</span></a></li><li id="ca-viewsource" class="selected mw-list-item"><a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&action=edit" title="Эта страница защищена от изменений. Вы можете посмотреть её исходный текст. [e]" accesskey="e"><span>Просмотр кода</span></a></li><li id="ca-history" class="mw-list-item"><a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&action=history" title="Журнал изменений страницы [h]" accesskey="h"><span>История</span></a></li> </ul> </div> </nav> <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-cactions-label" title="Больше возможностей" > <input type="checkbox" id="p-cactions-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-cactions" class="vector-menu-checkbox" aria-labelledby="p-cactions-label" > <label id="p-cactions-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Ещё</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <h3 >Поиск</h3> <form action="/w/index.php" id="searchform" class="vector-search-box-form"> <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-navigation"> <input class="vector-search-box-input" type="search" name="search" placeholder="Искать в Википедии" aria-label="Искать в Википедии" autocapitalize="sentences" title="Искать в Википедии [f]" accesskey="f" id="searchInput" > <input type="hidden" name="title" value="Служебная:Поиск"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Найти страницы, содержащие указанный текст" value="Найти"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Перейти к странице, имеющей в точности такое название" value="Перейти"> </div> </form> </div> </div> </div> <div id="mw-panel" class="vector-legacy-sidebar"> <div id="p-logo" role="banner"> <a class="mw-wiki-logo" href="/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0" title="Перейти на заглавную страницу"></a> </div> <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu-portal portal vector-menu" aria-labelledby="p-navigation-label" > <h3 id="p-navigation-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Навигация</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0" title="Перейти на заглавную страницу [z]" accesskey="z"><span>Заглавная страница</span></a></li><li id="n-content" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5"><span>Содержание</span></a></li><li id="n-featured" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8" title="Статьи, считающиеся лучшими статьями проекта"><span>Избранные статьи</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0" title="Посмотреть случайно выбранную страницу [x]" accesskey="x"><span>Случайная статья</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/%D0%9F%D0%BE%D1%80%D1%82%D0%B0%D0%BB:%D0%A2%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F" title="Статьи о текущих событиях в мире"><span>Текущие события</span></a></li><li id="n-sitesupport" class="mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_ru.wikipedia.org&uselang=ru" title="Поддержите нас"><span>Пожертвовать</span></a></li> </ul> </div> </nav> <nav id="p-participation" class="mw-portlet mw-portlet-participation vector-menu-portal portal vector-menu" aria-labelledby="p-participation-label" > <h3 id="p-participation-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Участие</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-bug_in_article" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B1_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%D1%85" title="Сообщить об ошибке в этой статье"><span>Сообщить об ошибке</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5"><span>Как править статьи</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BE" title="О проекте, о том, чем здесь можно заниматься, а также — где что находится"><span>Сообщество</span></a></li><li id="n-forum" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A4%D0%BE%D1%80%D1%83%D0%BC" title="Форум участников Википедии"><span>Форум</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%B2%D0%B5%D0%B6%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8" title="Список последних изменений [r]" accesskey="r"><span>Свежие правки</span></a></li><li id="n-newpages" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B" title="Список недавно созданных страниц"><span>Новые страницы</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0" title="Место расположения Справки"><span>Справка</span></a></li> </ul> </div> </nav> <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu-portal portal vector-menu" aria-labelledby="p-tb-label" > <h3 id="p-tb-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Инструменты</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_%D1%81%D1%8E%D0%B4%D0%B0/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" title="Список всех страниц, ссылающихся на данную [j]" accesskey="j"><span>Ссылки сюда</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar" rel="nofollow" title="Последние изменения в страницах, на которые ссылается эта страница [k]" accesskey="k"><span>Связанные правки</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%BF%D0%B5%D1%86%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B" title="Список служебных страниц [q]" accesskey="q"><span>Служебные страницы</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&action=info" title="Подробнее об этой странице"><span>Сведения о странице</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:UrlShortener&url=https%3A%2F%2Fru.wikipedia.org%2Fw%2Findex.php%3Ftitle%3D%25D0%259C%25D0%25BE%25D0%25B4%25D1%2583%25D0%25BB%25D1%258C%3ACalendar%26action%3Dedit"><span>Получить короткий URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:QrCode&url=https%3A%2F%2Fru.wikipedia.org%2Fw%2Findex.php%3Ftitle%3D%25D0%259C%25D0%25BE%25D0%25B4%25D1%2583%25D0%25BB%25D1%258C%3ACalendar%26action%3Dedit"><span>Скачать QR-код</span></a></li> </ul> </div> </nav> <nav id="p-coll-print_export" class="mw-portlet mw-portlet-coll-print_export emptyPortlet vector-menu-portal portal vector-menu" aria-labelledby="p-coll-print_export-label" > <h3 id="p-coll-print_export-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Печать/экспорт</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> <nav id="p-wikibase-otherprojects" class="mw-portlet mw-portlet-wikibase-otherprojects vector-menu-portal portal vector-menu" aria-labelledby="p-wikibase-otherprojects-label" > <h3 id="p-wikibase-otherprojects-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">В других проектах</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q101186533" title="Ссылка на связанный элемент репозитория данных [g]" accesskey="g"><span>Элемент Викиданных</span></a></li> </ul> </div> </nav> <nav id="p-lang" class="mw-portlet mw-portlet-lang vector-menu-portal portal vector-menu" aria-labelledby="p-lang-label" > <h3 id="p-lang-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">На других языках</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/ru">Политика конфиденциальности</a></li> <li id="footer-places-about"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5">Описание Википедии</a></li> <li id="footer-places-disclaimers"><a href="/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9E%D1%82%D0%BA%D0%B0%D0%B7_%D0%BE%D1%82_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8">Отказ от ответственности</a></li> <li id="footer-places-contact"><a href="//ru.wikipedia.org/wiki/Википедия:Контакты">Свяжитесь с нами</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Policy:Universal_Code_of_Conduct/ru">Кодекс поведения</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Разработчики</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/ru.wikipedia.org">Статистика</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Заявление о куки</a></li> <li id="footer-places-mobileview"><a href="//ru.m.wikipedia.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&action=edit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Мобильная версия</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> <script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"mediawiki.ui.button\".\n[1.41] Please use Codex. See migration guidelines: https://www.mediawiki.org/wiki/Codex/Migrating_from_MediaWiki_UI");mw.log.warn("This page is using the deprecated ResourceLoader module \"codex-search-styles\".\n[1.43] Use a CodexModule with codexComponents to set your specific components used: https://www.mediawiki.org/wiki/Codex#Using_a_limited_subset_of_components");mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-qqs7t","wgBackendResponseTime":382,"wgPageParseReport":{"limitreport":{"cputime":"0.115","walltime":"0.155","ppvisitednodes":{"value":669,"limit":1000000},"postexpandincludesize":{"value":37753,"limit":2097152},"templateargumentsize":{"value":6320,"limit":2097152},"expansiondepth":{"value":15,"limit":100},"expensivefunctioncount":{"value":6,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":14448,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 130.962 1 -total"," 99.83% 130.743 4 Шаблон:Editnotice"," 81.83% 107.166 4 Шаблон:Fmbox"," 9.57% 12.537 1 MediaWiki:Blockedtext/IP-диапазон"," 8.33% 10.910 12 Шаблон:Ifempty"," 7.97% 10.440 2 Шаблон:Добавить_тему"," 1.61% 2.114 4 Шаблон:Yesno"," 1.10% 1.439 1 Шаблон:BlockedHosting"]},"scribunto":{"limitreport-timeusage":{"value":"0.049","limit":"10.000"},"limitreport-memusage":{"value":1667823,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-qqs7t","timestamp":"20241124025619","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>