User Tools

Site Tools


yivalkes:calendar

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
yivalkes:calendar [2026/04/19 00:27] – [Calendar Structure] wikaraiyivalkes:calendar [2026/04/27 04:52] (current) mangotrain
Line 1: Line 1:
-====== Year ====== 
- 
-While the year used to be based off the moon cycles (**Yadellna** or moon year), this has changed in preference to the solar cycle (**Yasha**). 
- 
 <html> <html>
-<div id="yivalkes-date-container" style="border: 1px solid #555; padding: 15px; margin: 15px 0; background: transparent; border-radius: 8px; font-family: sans-serif; text-align: center;"> +<!-- Hi fellow cheesebrain ;> --> 
-    <strong style="font-size: 1.1em; text-transform: uppercase; letter-spacing: 1px;">Current Yivalkes Date (Yasha)</strong><br>+</html> 
 +<html> 
 +<style> 
 +    /* Force the calendar icon to white and the popup to dark mode */ 
 +    #custom-date-picker { 
 +        color-scheme: dark; 
 +    } 
 +    #custom-date-picker::-webkit-calendar-picker-indicator { 
 +        filter: invert(1); 
 +        cursor: pointer; 
 +    } 
 +</style> 
 + 
 +<div id="yivalkes-date-container" style="border: 1px solid #555; padding: 15px; margin: 15px 0 10px 0; background: transparent; border-radius: 8px; font-family: sans-serif; text-align: center;"> 
 +    <strong style="font-size: 1.1em; text-transform: uppercase; letter-spacing: 1px;">Our Current Date in Yivalkes'</strong><br>
     <div id="yivalkes-date" style="font-size: 1.4em; margin-top: 8px; font-weight: bold;">Calculating...</div>     <div id="yivalkes-date" style="font-size: 1.4em; margin-top: 8px; font-weight: bold;">Calculating...</div>
     <div id="yivalkes-details" style="font-size: 0.9em; opacity: 0.8; margin-top: 5px;"></div>     <div id="yivalkes-details" style="font-size: 0.9em; opacity: 0.8; margin-top: 5px;"></div>
 +</div>
 +
 +<div id="yivalkes-converter-container" style="border: 1px solid #444; padding: 12px; margin-bottom: 15px; background: rgba(255,255,255,0.05); border-radius: 8px; font-family: sans-serif; text-align: center;">
 +    <span style="font-size: 0.9em; font-weight: bold; opacity: 0.9;">Or Select Date:</span><br/>
 +    <div style="margin-top: 3px; display: flex; align-items: center; justify-content: center;">
 +        <input type="date" id="custom-date-picker" style="padding: 5px; border-radius: 4px; border: 1px solid #777; background: transparent; color: white; font-family: inherit; outline: none;">
 +    </div>
 +    <div id="custom-date-result" style="font-weight: bold; color: #4CAF50;"></div>
 </div> </div>
 </html> </html>
 +
 +====== Year ======
 +
 +While the year used to be based off the moon cycles (**Yadellna** or moon year), this has changed in preference to the solar cycle (**Yasha**).
  
 ====== Calendar Structure ====== ====== Calendar Structure ======
Line 18: Line 40:
   * 8 regular weeks of 5 days   * 8 regular weeks of 5 days
   * 4 to 6 celebratory days (**Levannas**)   * 4 to 6 celebratory days (**Levannas**)
-  * The holiday proper+  * The holiday proper (**Sharenden**)
  
 ====== Day and Week Logic ====== ====== Day and Week Logic ======
Line 24: Line 46:
 The day in the month is referred to as **Morning-Day-Week**, which is counter-intuitive to what we expect.  The day in the month is referred to as **Morning-Day-Week**, which is counter-intuitive to what we expect. 
  
-  * The first day of the week is actually **10**. +  * The first day of the week is actually **10** 
-  * The first week is **1**. +  * The first week is **1** 
-  * Combining these gives us **11** for the very first day+  * Combining these gives us **11** for the very first day
  
 The 2nd day of the week is **20**, which would mean that the day following day 11 is actually 21, then 31, 41, 51, to end up to 12, 22, 32, and so on. The 2nd day of the week is **20**, which would mean that the day following day 11 is actually 21, then 31, 41, 51, to end up to 12, 22, 32, and so on.
Line 33: Line 55:
  
 ^ Month ^ First day ^ 2nd day ^ 3rd day ^ 4th day ^ 5th day ^ ^ Month ^ First day ^ 2nd day ^ 3rd day ^ 4th day ^ 5th day ^
 +^ Wilaf ^ Nemf ^ Doof ^ Leffe ^ Tshof ^ Bamf ^
 ^ Week 1 | 11 | 21 | 31 | 41 | 51 | ^ Week 1 | 11 | 21 | 31 | 41 | 51 |
 +^ Nenar | Nenarla / Shaalen / Nennelen | Binnelen | Lennelen | Gunnelen | Baniineren |
 ^ Week 2 | 12 | 22 | 32 | 42 | 52 | ^ Week 2 | 12 | 22 | 32 | 42 | 52 |
 +^ Doolar | Doolarla / Dootslen / NeDoolen | BiDoolen | LeDoolen | KuDoolen | PanDoolen |
 ^ Week 3 | 13 | 23 | 33 | 43 | 53 | ^ Week 3 | 13 | 23 | 33 | 43 | 53 |
 +^ Lelar | Lelarla / Nitslen / NeLaaren | BiLaaren | Lilleren | GuuLaren | Banarlen |
 ^ Week 4 | 14 | 24 | 34 | 44 | 54 | ^ Week 4 | 14 | 24 | 34 | 44 | 54 |
 +^ Goolar | Goolarla / Tsoorelen / NeRuulen | BiRuulen * | LeRuulen | KuRuulen | Banoorlen |
 ^ Week 5 | 15 | 25 | 35 | 45 | 55 | ^ Week 5 | 15 | 25 | 35 | 45 | 55 |
 +^ Bammar | Bammarla / Sheenelen / NeVameng | BiVameng | LeVameng | KuVameng | FaVameng * |
 ^ Week 6 | 16 | 26 | 36 | 46 | 56 | ^ Week 6 | 16 | 26 | 36 | 46 | 56 |
 +^ Duulelar | Duulelarla / NeDuuleren | BiDuuleren | LeDuuleren | KuDuuleren | PaDuuleren |
 ^ Week 7 | 17 | 27 | 37 | 47 | 57 | ^ Week 7 | 17 | 27 | 37 | 47 | 57 |
 +^ Niraar | Niraarla / NeNirlen | BiNirlen | LeNirlen | KuNirlen | PanNirlen / NeBellen |
 ^ Last week | 10 | 20 | 30 | 40 | 50 | ^ Last week | 10 | 20 | 30 | 40 | 50 |
 +^ Barell | Barella / | BiGiilen | LeLiilen | GuWiilen | BaNiilen |
 ^ Levannas | (6) 5 | 4 | 3 | 2 | 1/0 | ^ Levannas | (6) 5 | 4 | 3 | 2 | 1/0 |
 +^ Levannas | (Lenduley) Lembami | Lenko'i | Lenleli | Lendoli | Baringi |
 +
 +* BiRuulen is a great day for beating things, like dusty cloths or aging leather.
 +
 +* Favameng is a great day for silly jokes.
 +
  
 <html> <html>
 <script> <script>
 (function() { (function() {
-    // Yivalkes Solar Year (Yasha8 Months and their target Holidays +    function calculateYivalkes(targetDate{ 
-    const holidayDefinitions = [ +        const currentYear = targetDate.getFullYear(); 
-        { name: "Laawin (Winter-Spring Cusp)", month: "Lawni", monthName: "To Winter-Spring", date: "-02-04" }, +        const holidayDefinitions = [ 
-        { name: "Largin (Spring Equinox)", month: "LenSheni", monthName: "To Spring", date: "-03-20" }, +            { name: "Laawin (Winter-Spring Cusp)", month: "Lawni", monthName: "To Winter-Spring", date: "-02-04" }, 
-        { name: "Orakk (Spring-Summer Cusp)", month: "Olikii", monthName: "To Spring-Summer", date: "-05-05" }, +            { name: "Largin (Spring Equinox)", month: "LenSheni", monthName: "To Spring", date: "-03-21" }, 
-        { name: "Yakkal (Summer Solstice)", month: "Yagli", monthName: "To Summer Solstice", date: "-06-21" }, +            { name: "Orakk (Spring-Summer Cusp)", month: "Olikii", monthName: "To Spring-Summer", date: "-05-06" }, 
-        { name: "Wakhaa (Summer-Fall Cusp)", month: "Wiik", monthName: "To Summer-Fall", date: "-08-07" }, +            { name: "Yakkal (Summer Solstice)", month: "Yagli", monthName: "To Summer Solstice", date: "-06-21" }, 
-        { name: "Gargaan (Fall Equinox)", month: "Gannshenii", monthName: "To Fall", date: "-09-22" }, +            { name: "Wakhaa (Summer-Fall Cusp)", month: "Wiik", monthName: "To Summer-Fall", date: "-08-07" }, 
-        { name: "Argaas (Fall-Winter Cusp)", month: "Akkaas", monthName: "To Fall-Winter", date: "-11-07" }, +            { name: "Gargaan (Fall Equinox)", month: "Gannshenii", monthName: "To Fall", date: "-09-22" }, 
-        { name: "Wigiil (Winter Solstice)", month: "Wilii", monthName: "To Winter Solstice", date: "-12-21"+            { name: "Argaas (Fall-Winter Cusp)", month: "Akkaas", monthName: "To Fall-Winter", date: "-11-07" }, 
-    ];+            { name: "Wigiil (Winter Solstice)", month: "Wilii", monthName: "To Winter Solstice", date: "-12-21"
 +        ];
  
-    const now = new Date(); +        let allHolidays = []; 
-    const today = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())); +        [-1, 0, 1].forEach(yearOffset => { 
-    const currentYear = today.getUTCFullYear(); +            holidayDefinitions.forEach(def => { 
-     +                const parts = def.date.split('-'); 
-    let allHolidays = []; +                allHolidays.push({ 
-    [-1, 0, 1].forEach(yearOffset => { +                    name: def.name, 
-        holidayDefinitions.forEach(def => { +                    month: def.month, 
-            allHolidays.push({ +                    monthName: def.monthName, 
-                name: def.name, +                    dateObj: new Date(currentYear + yearOffset, parseInt(parts[1]) - 1, parseInt(parts[2])) 
-                month: def.month, +                });
-                monthName: def.monthName, +
-                dateObj: new Date(Date.UTC(currentYear + yearOffset, parseInt(def.date.split('-')[1]) - 1, parseInt(def.date.split('-')[2])))+
             });             });
         });         });
-    }); 
  
-    allHolidays.sort((a, b) => a.dateObj - b.dateObj);+        allHolidays.sort((a, b) => a.dateObj - b.dateObj)
 +        let nextHolidayIndex = allHolidays.findIndex(h => h.dateObj >= targetDate); 
 +        let nextHoliday = allHolidays[nextHolidayIndex]; 
 +        let prevHoliday = allHolidays[nextHolidayIndex - 1];
  
-    let nextHolidayIndex allHolidays.findIndex(h => h.dateObj >= today); +        const msPerDay 1000 * 60 * 60 * 24; 
-    let nextHoliday allHolidays[nextHolidayIndex]; +        const D = Math.floor((targetDate - prevHoliday.dateObj) / msPerDay); 
-    let prevHoliday = allHolidays[nextHolidayIndex 1];+        const daysLeft Math.floor((nextHoliday.dateObj targetDate) / msPerDay);
  
-    const msPerDay = 1000 * 60 * 60 * 24; +        let displayDate = ""; 
-    const D = Math.floor((today - prevHoliday.dateObj) / msPerDay); +        if (daysLeft === 0) { 
-    const daysLeft = Math.floor((nextHoliday.dateObj - today) / msPerDay); +            displayDate = "Holiday: " + nextHoliday.name; 
- +        } else if (D <= 40) { 
-    let displayDate = ""; +            let weekNum = Math.ceil(D / 5); 
-    let displayDetails = ""; +            let dayInWeek = D - (weekNum - 1) * 5; 
- +            let weekChar = weekNum === 8 ? "0" : weekNum.toString(); 
-    if (daysLeft === 0) { +            displayDate "Day " + dayInWeek.toString() + weekChar + " of " + nextHoliday.month; 
-        displayDate = "Holiday: " + nextHoliday.name; +        } else { 
-        displayDetails = "Day 0 of Levannas"; +            displayDate = "Levannas " + daysLeft + " of " + nextHoliday.month; 
-    } else if (D <= 40) { +        
-        let weekNum = Math.ceil(D / 5); +        return { date: displayDate, details: "(" + nextHoliday.monthName + ")" };
-        let dayInWeek = D - (weekNum - 1) * 5; +
-        let weekChar = weekNum === 8 ? "0" : weekNum.toString(); +
-        let yivalkesDate = dayInWeek.toString() + weekChar+
-         +
-        displayDate = "Day " + yivalkesDate + " of " + nextHoliday.month; +
-        displayDetails = "(" + nextHoliday.monthName + " &ndash; Week " + weekNum + ", Day " + dayInWeek + ")"; +
-    } else { +
-        displayDate = "Levannas " + daysLeft + " of " + nextHoliday.month; +
-        displayDetails = "(" + daysLeft + " days until " + nextHoliday.name + ")";+
     }     }
  
-    document.getElementById('yivalkes-date').innerHTML = displayDate+    const today = new Date(new Date().toLocaleString("en-US", {timeZone: "America/Vancouver"})); 
-    document.getElementById('yivalkes-details').innerHTML = displayDetails;+    today.setHours(0, 0, 0, 0); 
 +    const currentRes = calculateYivalkes(today); 
 +    document.getElementById('yivalkes-date').innerHTML = currentRes.date
 +    document.getElementById('yivalkes-details').innerHTML = currentRes.details; 
 + 
 +    const picker = document.getElementById('custom-date-picker'); 
 +    const resultSpan = document.getElementById('custom-date-result'); 
 +    picker.addEventListener('change', function(e) { 
 +        if (!e.target.value) return; 
 +        const parts = e.target.value.split('-'); 
 +        const selectedDate = new Date(parts[0], parts[1] - 1, parts[2]); 
 +        const res = calculateYivalkes(selectedDate); 
 +        resultSpan.innerHTML = res.date; 
 +    });
 })(); })();
 </script> </script>
 </html> </html>
yivalkes/calendar.1776583646.txt.gz · Last modified: by wikarai