[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 в этой статье или этом вопросе.

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


(will be screened)
(will be screened)
(will be screened)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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