Здравствуйте, это 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>>
/*Пересчет дней в месяцы, если дней больше, чем в текущем месяце*/
/*Пересчет месяцев в годы, если месяцев больше 12*/
<<if $month > 12>>
<<set $year += Math.floor($month / 12)>>
<<set $month %= 12>>
<</if>>
Вы можете использовать массив, чтобы хранить названия месяцев, и затем обращаться к нему по индексу $month. Например, вы можете добавить следующий код в начало вашей истории:
А затем, когда вам нужно отобразить название месяца, вы можете использовать код вроде этого:
<<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 в этой статье или этом вопросе.
Надеюсь, это поможет вам решить вашу задачу. Если у вас есть еще вопросы, я буду рад ответить на них. 😊