Дискуссионный математический форумМатематический форум
Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
MathHelpPlanet.com RSS-лента Математического форума

Часовой пояс: UTC + 3 часа [ Летнее время ]


JavaScript: дата прописью

JavaScript: дата прописью


Во многих документах часто требуется указывать дату прописью в именительном падеже, к примеру: в доверенностях, накладных и платежных поручениях. Например, дата 31.10.2018 прописью будет "тридцать первое октября две тысячи восемнадцатого года".


Ниже на JavaScript (см. код в конце статьи) реализован алгоритм преобразования даты в строку прописью в виде функции PropisData(data), в которой аргумент data при вызове функции должен быть записан в виде строки "дд.мм.гггг", где "дд" - порядковый номер календарного дня, "мм" - порядковый номер календарного месяца и "гггг" - порядковый номер календарного года, например, "02.06.1914". Данная функция может представлять прописью даты из 1-го десятитысячилетия н.э., то есть с 01.01.0001 по 31.12.9999.


Оценить работу этого алгоритма можно с помощью этой формы:



В начале в функции PropisData(data) с помощью регулярного выражения проверяется, соответствует ли дата формату "дд.мм.гггг", затем проверяется, является ли указанное выражение датой по григорианскому календарю (см. ниже); например, 01.05.2000 - корректная дата, а 29.02.1926 - не существующая дата в григорианском календаре.


function PropisData(data)  //аргумент data должен быть строкой
{
//Проверка, соответствует ли дата формату ДД.ММ.ГГГГ
if ( !/^\d\d\.\d\d\.\d\d\d\d$/.test(data) )
{
return "не является датой по григорианскому календарю в формате ДД.ММ.ГГГГ";
}

var d = +data.substr(0, 2), //день
m = +data.substr(3, 2), //месяц
y = +data.substr(6, 4); //год

//Проверка, корректная ли дата по григорианскому календарю
// До 1582 г. все года н.э., делящиеся на 4, считаются високосными,
// после только те года, которые делятся на 4 и не деляться на 100 или делятся на 400;
// если нужно учитывать високосные года до принятия григорианского календаря в России в 1918 г.,
// то замените в коде выражение "y < 1582" на "y < 1918".
if (d == 0 || m == 0 || m > 12 || y == 0
|| ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d > 31)
|| ((m == 4 || m == 6 || m == 9 || m == 11) && d > 30)
|| (m == 2 && !(d < 29 || (d < 30 && y % 4 == 0 && (y < 1582 || y % 100 != 0 || y % 400 == 0))))
) {
return "не является датой по григорианскому календарю в формате ДД.ММ.ГГГГ";
}

var Day1, Month1, Year1, Year2, Year3, Year4, Year5, Year6, Year7, Year8, yearPropis;

Day1 = ["", "первое ", "второе ", "третье ", "четвёртое ", "пятое ", "шестое ", "седьмое ",
"восьмое ", "девятое ", "десятое ", "одиннадцатое ", "двенадцатое ", "тринадцатое ",
"четырнадцатое ", "пятнадцатое ", "шестнадцатое ", "семнадцатое ", "восемнадцатое ",
"девятнадцатое ", "двадцатое ", "двадцать первое ", "двадцать второе ", "двадцать третье ",
"двадцать четвёртое ", "двадцать пятое ", "двадцать шестое ", "двадцать седьмое ",
"двадцать восьмое ", "двадцать девятое ", "тридцатое ", "тридцать первое "];

Month1 = ["", "января ", "февраля ", "марта ", "апреля ", "мая ", "июня ", "июля ",
"августа ", "сентября ", "октября ", "ноября ", "декабря "];

Year1 = ["", "первого ", "второго ", "третьего ", "четвёртого ", "пятого ",
"шестого ", "седьмого ", "восьмого ", "девятого "];

Year8 = ["", "одиннадцатого ", "двенадцатого ", "тринадцатого ", "четырнадцатого ", "пятнадцатого ",
"шестнадцатого ", "семнадцатого ", "восемнадцатого ", "девятнадцатого "];

Year2 = ["", "десятого ", "двадцатого ", "тридцатого ", "сорокового ", "пятидесятого ",
"шестидесятого ", "семидесятого ", "восьмидесятого ", "девяностого "];

Year3 = ["", "сотого ", "двухсотого ", "трёхсотого ", "четырёхсотого ", "пятисотого ",
"шестисотого ", "семисотого ", "восьмисотого ", "девятисотого "];

Year4 = ["", "тысячного ", "двухтысячного ", "трёхтысячного ", "четырёхтысячного ", "пятитысячного ",
"шеститысячного ", "семитысячного ", "восьмитысячного ", "девятитысячного "];

Year5 = ["", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ",
"семьдесят ", "восемьдесят ", "девяносто "];

Year6 = ["", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ",
"шестьсот ", "семьсот ", "восемьсот ", "девятьсот "];

Year7 = ["", "тысяча ", "две тысячи ", "три тысячи ", "четыре тысячи ", "пять тысяч ",
"шесть тысяч ", "семь тысяч ", "восемь тысяч ", "девять тысяч "];

y = y + "";

if (y.length == 4) //Проверка 4-х значных годов: 1000,1001,...,9999
{ if (+y % 1000 == 0) {
yearPropis = Year4[+y.substr(0, 1)]; //1000,2000,...,9000
}
else if (+y % 100 == 0) {
yearPropis = Year7[+y.substr(0, 1)] + Year3[+y.substr(1, 1)]; //1100,1200,...,9900
}
else {
yearPropis = Year7[+y.substr(0, 1)] + Year6[+y.substr(1, 1)];
if (+y % 10 == 0) {
yearPropis += Year2[+y.substr(2, 1)];
}
else if (+y.substr(2, 2) < 10) {
yearPropis += Year1[+y.substr(3, 1)];
}
else if (+y.substr(2, 2) < 20) {
yearPropis += Year8[+y.substr(3, 1)];
}
else {
yearPropis += Year5[+y.substr(2, 1)] + Year1[+y.substr(3, 1)];
}
}
}
else if (y.length == 3) //Проверка 3-х значных годов: 100,101,...,999
{ if (+y % 100 == 0) {
yearPropis = Year3[+y.substr(0, 1)];
}
else if (+y % 10 == 0) {
yearPropis = Year6[+y.substr(0, 1)] + Year2[+y.substr(1, 1)];
}
else if (+y.substr(1, 2) < 10) {
yearPropis = Year6[+y.substr(0, 1)] + Year1[+y.substr(2, 1)];
}
else if (+y.substr(1, 2) < 20) {
yearPropis = Year6[+y.substr(0, 1)] + Year8[+y.substr(2, 1)];
}
else {
yearPropis = Year6[+y.substr(0, 1)] + Year5[+y.substr(1, 1)] + Year1[+y.substr(2, 1)];
}
}
else if (y.length == 2) //Проверка 2-х значных годов: 10,11,...,99
{ if (+y % 10 == 0) {
yearPropis = Year2[+y.substr(0, 1)];
}
else if (+y.substr(0, 2) < 20) {
yearPropis = Year8[+y.substr(1, 1)];
}
else {
yearPropis = Year5[+y.substr(0, 1)] + Year1[+y.substr(1, 1)];
}
}
else
{ yearPropis = Year1[+y]; }

return (Day1[d] + Month1[m] + yearPropis + "года");
}


Григориа́нский календа́рь — система исчисления времени, основанная на циклическом обращении Земли вокруг Солнца; средняя продолжительность года принята равной 365,2425 суток; содержит 97 високосных лет на 400 лет[1].

Впервые григорианский календарь был введён папой римским Григорием XIII в католических странах 4 октября 1582 года взамен прежнего юлианского: следующим днём после четверга 4 октября стала пятница 15 октября. Григорианский календарь используется в большинстве государств и стран мира[2]. В литературе также применяется название — Новый стиль.

В григорианском календаре длительность года принимается равной 365,2425 суток. Длительность невисокосного года — 365 суток, високосного — 366.

2425=365+0{,}25-0{,}01+0{,}0025=365+{\frac{1}{4}}-{\frac{1}{100}}+{\frac{1}{400}}.

Отсюда следует распределение високосных годов:

  • год, номер которого кратен 400, — високосный;
  • остальные годы, номер которых кратен 100, — невисокосные;
  • остальные годы, номер которых кратен 4, — високосные.

Таким образом, 1600 и 2000 годы были високосными, а 1700, 1800 и 1900 годы високосными не были. Также не будет високосным и 2100 год.

Погрешность в одни сутки по сравнению с годом равноденствий в григорианском календаре накопится примерно за 10 тысяч лет (в юлианском — примерно за 128 лет). Часто встречающаяся оценка, приводящая к величине порядка 3 тысяч лет, получается, если не учитывать, что со временем изменяется количество суток в тропическом году и, кроме того, изменяется соотношение между продолжительностями времён года[3][4][5].

В григорианском календаре годы бывают високосные и невисокосные; год может начинаться с любого из семи дней недели. В совокупности это даёт 2 × 7 = 14 вариантов календаря на год.
...
В России (на территории, находившейся под контролем Советской власти) григорианский календарь был введён декретом от 26 января 1918 года Совнаркома, согласно которому в 1918 году после 31 января следует 14 февраля. На территориях бывшей Российской империи, находившихся под контролем других государственных образований, возникших после падения Временного правительства, даты официального введения нового стиля отличаются. Так, Временное Сибирское правительство ввело новый стиль декретом от 31 августа 1918 года, постановив считать день 1 октября 1918 днём 14 октября 1918 года[27]. Таким образом, в ряде стран, в том числе в России, в 1900 году был день 29 февраля, тогда как в большинстве стран его не было.

Источник: https://ru.wikipedia.org/wiki/Григорианский_календарь
Математический форум (помощь с решением задач, обсуждение вопросов по математике).
Кнопка "Поделиться"

Часовой пояс: UTC + 3 часа [ Летнее время ]


Яндекс.Метрика

Copyright © 2010-2019 MathHelpPlanet.com. All rights reserved