[personal profile] blocknote

Здравствуйте, это Bing. Я могу попытаться написать код для Twine Sugarcube 2, который будет пересчитывать дни в месяцы и годы, учитывая високосные годы. Вот возможный вариант решения: 


Я надеюсь, что этот код вам поможет. Если вам нужно больше информации о Twine Sugarcube 2, вы можете посмотреть этот сайт или этот вопрос. 😊




/*Пересчет часов в дни, если часов больше 24*/
<<if $hours >= 24>>
    <<set $days += Math.floor($hours / 24)>>
    /*Увеличение показателя $gdays на ту же величину, что и $days*/
    <<set $gdays += Math.floor($hours / 24)>>
    <<set $hours %= 24>>
<</if>>
 
/*Пересчет дней в месяцы и годы, если дней больше 28*/
<<if $days > 28>>
    /*Определение количества дней в текущем месяце, учитывая високосные годы*/
    <<set $daysInMonth to 0>>
    <<switch $month>>
        <<case 1>>
            <<set $daysInMonth to 31>>
        <<case 2>>
            /*Проверка, является ли текущий год високосным*/
            <<if ($year % 4 eq 0) and (($year % 100 neq 0) or ($year % 400 eq 0))>>
                <<set $daysInMonth to 29>>
            <<else>>
                <<set $daysInMonth to 28>>
            <</if>>
        <<case 3>>
            <<set $daysInMonth to 31>>
        <<case 4>>
            <<set $daysInMonth to 30>>
        <<case 5>>
            <<set $daysInMonth to 31>>
        <<case 6>>
            <<set $daysInMonth to 30>>
        <<case 7>>
            <<set $daysInMonth to 31>>
        <<case 8>>
            <<set $daysInMonth to 31>>
        <<case 9>>
            <<set $daysInMonth to 30>>
        <<case 10>>
            <<set $daysInMonth to 31>>
        <<case 11>>
            <<set $daysInMonth to 30>>
        <<case 12>>
            <<set $daysInMonth to 31>>
        <<default>>
            <<set $daysInMonth to 0>>
    <</switch>>
 
    /*Пересчет дней в месяцы, если дней больше, чем в текущем месяце*/
    <<if $days > $daysInMonth>>
        <<set $month += Math.floor($days / $daysInMonth)>>
        <<set $days %= $daysInMonth>>
    <</if>>
<</if>>
 
/*Пересчет месяцев в годы, если месяцев больше 12*/
<<if $month > 12>>
    <<set $year += Math.floor($month / 12)>>
    <<set $month %= 12>>
<</if>>
 


Вы можете использовать массив, чтобы хранить названия месяцев, и затем обращаться к нему по индексу $month. Например, вы можете добавить следующий код в начало вашей истории:
 
/*Создание массива с названиями месяцев*/
<<set $monthNames to ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]>>
 
А затем, когда вам нужно отобразить название месяца, вы можете использовать код вроде этого:
 
<<print $monthNames[$month - 1]>>
 
Обратите внимание, что индекс массива начинается с нуля, поэтому вам нужно вычесть единицу из значения $month, чтобы получить правильный элемент массива.
 
Если вам нужно больше помощи по работе с массивами в Twine Sugarcube 2, вы можете посмотреть [этот вопрос] или [этот сайт]. 😊

Оператор case в предоставленном коде используется внутри оператора switch для выбора соответствующего блока кода в зависимости от значения переменной $month. Оператор switch проверяет значение переменной $month и выполняет соответствующий блок кода, помеченный оператором case. Если значение переменной $month не соответствует ни одному из операторов case, выполняется блок кода, помеченный оператором default.

Например, в следующем коде оператор switch проверяет значение переменной $month и выполняет соответствующий блок кода

А ларчик просто открывался... кажется начинаю врубаться в массивы сугаркуба, благодаря бингу. Который зараза снова отрубился и посадил меня на лимит в 30 вопросов в сутки. 

 

 Здравствуйте, это Bing. Я могу помочь вам с вашим вопросом о твайн сугаркуб 2. 😊

Если вы хотите отобразить только конкретный месяц из массива monthNames, вам нужно указать его индекс в квадратных скобках. Например, если вы хотите отобразить первый месяц (Январь), вы можете написать:

<<print $monthNames[0]>> 

Если вы хотите отобразить последний месяц (Декабрь), вы можете написать:

<<print $monthNames[11]>> 

Индексы массивов в JavaScript начинаются с нуля, поэтому первый элемент имеет индекс 0, а последний элемент имеет индекс, равный длине массива минус один. Вы можете узнать больше о работе с массивами в JavaScript в этой статье или этом вопросе.

Надеюсь, это поможет вам решить вашу задачу. Если у вас есть еще вопросы, я буду рад ответить на них. 😊


Profile

blocknote

January 2025

S M T W T F S
    1234
567891011
12131415 161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios