UNPKG

@aharris02/bazi-calculator-by-alvamind

Version:

A fork of alvamind's comprehensive Bazi calculator for personal use

1,188 lines (1,185 loc) 379 kB
// src/constants.ts var HEAVENLY_STEMS_DATA = [ { name: "Yang Wood", value: 1, character: "\u7532", spelling: "jia", elementType: "WOOD", yinYang: "Yang" }, { name: "Yin Wood", value: 2, character: "\u4E59", spelling: "yi", elementType: "WOOD", yinYang: "Yin" }, { name: "Yang Fire", value: 3, character: "\u4E19", spelling: "bing", elementType: "FIRE", yinYang: "Yang" }, { name: "Yin Fire", value: 4, character: "\u4E01", spelling: "ding", elementType: "FIRE", yinYang: "Yin" }, { name: "Yang Earth", value: 5, character: "\u620A", spelling: "wu", elementType: "EARTH", yinYang: "Yang" }, { name: "Yin Earth", value: 6, character: "\u5DF1", spelling: "ji", elementType: "EARTH", yinYang: "Yin" }, { name: "Yang Metal", value: 7, character: "\u5E9A", spelling: "geng", elementType: "METAL", yinYang: "Yang" }, { name: "Yin Metal", value: 8, character: "\u8F9B", spelling: "xin", elementType: "METAL", yinYang: "Yin" }, { name: "Yang Water", value: 9, character: "\u58EC", spelling: "ren", elementType: "WATER", yinYang: "Yang" }, { name: "Yin Water", value: 10, character: "\u7678", spelling: "gui", elementType: "WATER", yinYang: "Yin" } ]; var getStem = (char) => HEAVENLY_STEMS_DATA.find((s) => s.character === char); var HIDDEN_STEMS_CHARS = { \u5B50: ["\u7678"], \u4E11: ["\u5DF1", "\u7678", "\u8F9B"], \u5BC5: ["\u7532", "\u4E19", "\u620A"], \u536F: ["\u4E59"], \u8FB0: ["\u620A", "\u4E59", "\u7678"], \u5DF3: ["\u4E19", "\u5E9A", "\u620A"], \u5348: ["\u4E01", "\u5DF1"], \u672A: ["\u5DF1", "\u4E01", "\u4E59"], \u7533: ["\u5E9A", "\u58EC", "\u620A"], \u9149: ["\u8F9B"], \u620C: ["\u620A", "\u8F9B", "\u4E01"], \u4EA5: ["\u58EC", "\u7532"] }; var getHiddenStemsObjects = (branchChar) => (HIDDEN_STEMS_CHARS[branchChar] || []).map((char) => getStem(char)).filter((s) => s !== void 0); var EARTHLY_BRANCHES_DATA = [ { name: "Rat", value: 1, character: "\u5B50", spelling: "zi", elementType: "WATER", animal: "Rat", hiddenStems: getHiddenStemsObjects("\u5B50"), yinYang: "Yang" }, { name: "Ox", value: 2, character: "\u4E11", spelling: "chou", elementType: "EARTH", animal: "Ox", hiddenStems: getHiddenStemsObjects("\u4E11"), yinYang: "Yin" }, { name: "Tiger", value: 3, character: "\u5BC5", spelling: "yin", elementType: "WOOD", animal: "Tiger", hiddenStems: getHiddenStemsObjects("\u5BC5"), yinYang: "Yang" }, { name: "Rabbit", value: 4, character: "\u536F", spelling: "mao", elementType: "WOOD", animal: "Rabbit", hiddenStems: getHiddenStemsObjects("\u536F"), yinYang: "Yin" }, { name: "Dragon", value: 5, character: "\u8FB0", spelling: "chen", elementType: "EARTH", animal: "Dragon", hiddenStems: getHiddenStemsObjects("\u8FB0"), yinYang: "Yang" }, { name: "Snake", value: 6, character: "\u5DF3", spelling: "si", elementType: "FIRE", animal: "Snake", hiddenStems: getHiddenStemsObjects("\u5DF3"), yinYang: "Yin" }, { name: "Horse", value: 7, character: "\u5348", spelling: "wu", elementType: "FIRE", animal: "Horse", hiddenStems: getHiddenStemsObjects("\u5348"), yinYang: "Yang" }, { name: "Goat", value: 8, character: "\u672A", spelling: "wei", elementType: "EARTH", animal: "Goat", hiddenStems: getHiddenStemsObjects("\u672A"), yinYang: "Yin" }, { name: "Monkey", value: 9, character: "\u7533", spelling: "shen", elementType: "METAL", animal: "Monkey", hiddenStems: getHiddenStemsObjects("\u7533"), yinYang: "Yang" }, { name: "Rooster", value: 10, character: "\u9149", spelling: "you", elementType: "METAL", animal: "Rooster", hiddenStems: getHiddenStemsObjects("\u9149"), yinYang: "Yin" }, { name: "Dog", value: 11, character: "\u620C", spelling: "xu", elementType: "EARTH", animal: "Dog", hiddenStems: getHiddenStemsObjects("\u620C"), yinYang: "Yang" }, { name: "Pig", value: 12, character: "\u4EA5", spelling: "hai", elementType: "WATER", animal: "Pig", hiddenStems: getHiddenStemsObjects("\u4EA5"), yinYang: "Yin" } ]; var GO_BRANCH_VALUE_MAP = { 1: 3, 2: 4, 3: 5, 4: 6, 5: 7, 6: 8, 7: 9, 8: 10, 9: 11, 10: 12, 11: 1, 12: 2 }; var goBranchValueToStandard = (goValue) => GO_BRANCH_VALUE_MAP[goValue] || 0; var STANDARD_TO_GO_BRANCH_MAP = Object.entries(GO_BRANCH_VALUE_MAP).reduce((acc, [key, val]) => { acc[val] = parseInt(key); return acc; }, {}); var standardBranchValueToGo = (standardValue) => STANDARD_TO_GO_BRANCH_MAP[standardValue] || 0; var NA_YIN_MAP = { "Yang Wood Rat": { name: "Sea metal", element: "Metal", value: 4 }, "Yin Wood Ox": { name: "Sea metal", element: "Metal", value: 4 }, "Yang Fire Tiger": { name: "Furnace fire", element: "Fire", value: 2 }, "Yin Fire Rabbit": { name: "Furnace fire", element: "Fire", value: 2 }, "Yang Earth Dragon": { name: "Forest wood", element: "Wood", value: 3 }, "Yin Earth Snake": { name: "Forest wood", element: "Wood", value: 3 }, "Yang Metal Horse": { name: "Road earth", element: "Earth", value: 5 }, "Yin Metal Goat": { name: "Road earth", element: "Earth", value: 5 }, "Yang Water Monkey": { name: "Sword metal", element: "Metal", value: 4 }, "Yin Water Rooster": { name: "Sword metal", element: "Metal", value: 4 }, "Yang Wood Dog": { name: "Volcanic fire", element: "Fire", value: 2 }, "Yin Wood Pig": { name: "Volcanic fire", element: "Fire", value: 2 }, "Yang Fire Rat": { name: "Cave water", element: "Water", value: 1 }, "Yin Fire Ox": { name: "Cave water", element: "Water", value: 1 }, "Yang Earth Tiger": { name: "Fortress earth", element: "Earth", value: 5 }, "Yin Earth Rabbit": { name: "Fortress earth", element: "Earth", value: 5 }, "Yang Metal Dragon": { name: "Wax metal", element: "Metal", value: 4 }, "Yin Metal Snake": { name: "Wax metal", element: "Metal", value: 4 }, "Yang Water Horse": { name: "Willow wood", element: "Wood", value: 3 }, // Go: Willow Tree Wood "Yin Water Goat": { name: "Willow wood", element: "Wood", value: 3 }, // Go: Willow Tree Wood "Yang Wood Monkey": { name: "Stream water", element: "Water", value: 1 }, "Yin Wood Rooster": { name: "Stream water", element: "Water", value: 1 }, "Yang Fire Dog": { name: "Roof tiles earth", element: "Earth", value: 5 }, // Go: Earth on the Roof "Yin Fire Pig": { name: "Roof tiles earth", element: "Earth", value: 5 }, // Go: Earth on the Roof "Yang Earth Rat": { name: "Lightning fire", element: "Fire", value: 2 }, "Yin Earth Ox": { name: "Lightning fire", element: "Fire", value: 2 }, "Yang Metal Tiger": { name: "Conifer wood", element: "Wood", value: 3 }, "Yin Metal Rabbit": { name: "Conifer wood", element: "Wood", value: 3 }, "Yang Water Dragon": { name: "River water", element: "Water", value: 1 }, "Yin Water Snake": { name: "River water", element: "Water", value: 1 }, "Yang Wood Horse": { name: "Sand metal", element: "Metal", value: 4 }, "Yin Wood Goat": { name: "Sand metal", element: "Metal", value: 4 }, "Yang Fire Monkey": { name: "Forest fire", element: "Fire", value: 2 }, // Go: Fire on the Mountain "Yin Fire Rooster": { name: "Forest fire", element: "Fire", value: 2 }, // Go: Fire on the Mountain "Yang Earth Dog": { name: "Meadow wood", element: "Wood", value: 3 }, "Yin Earth Pig": { name: "Meadow wood", element: "Wood", value: 3 }, "Yang Metal Rat": { name: "Adobe earth", element: "Earth", value: 5 }, "Yin Metal Ox": { name: "Adobe earth", element: "Earth", value: 5 }, "Yang Water Tiger": { name: "Precious metal", element: "Metal", value: 4 }, "Yin Water Rabbit": { name: "Precious metal", element: "Metal", value: 4 }, "Yang Wood Dragon": { name: "Lamp fire", element: "Fire", value: 2 }, "Yin Wood Snake": { name: "Lamp fire", element: "Fire", value: 2 }, "Yang Fire Horse": { name: "Sky water", element: "Water", value: 1 }, "Yin Fire Goat": { name: "Sky water", element: "Water", value: 1 }, "Yang Earth Monkey": { name: "Highway earth", element: "Earth", value: 5 }, // Go: Earth on the Roadside "Yin Earth Rooster": { name: "Highway earth", element: "Earth", value: 5 }, // Go: Earth on the Roadside "Yang Metal Dog": { name: "Jewellery metal", element: "Metal", value: 4 }, "Yin Metal Pig": { name: "Jewellery metal", element: "Metal", value: 4 }, "Yang Water Rat": { name: "Mulberry wood", element: "Wood", value: 3 }, "Yin Water Ox": { name: "Mulberry wood", element: "Wood", value: 3 }, "Yang Wood Tiger": { name: "Rapids water", element: "Water", value: 1 }, "Yin Wood Rabbit": { name: "Rapids water", element: "Water", value: 1 }, "Yang Fire Dragon": { name: "Desert earth", element: "Earth", value: 5 }, "Yin Fire Snake": { name: "Desert earth", element: "Earth", value: 5 }, "Yang Earth Horse": { name: "Sun fire", element: "Fire", value: 2 }, "Yin Earth Goat": { name: "Sun fire", element: "Fire", value: 2 }, "Yang Metal Monkey": { name: "Pomegranate wood", element: "Wood", value: 3 }, "Yin Metal Rooster": { name: "Pomegranate wood", element: "Wood", value: 3 }, "Yang Water Dog": { name: "Ocean water", element: "Water", value: 1 }, "Yin Water Pig": { name: "Ocean water", element: "Water", value: 1 } // Add aliases from Go if needed for consistency (e.g., "Earth on the Roof") // It's better to keep one canonical name if possible. }; var HOUR_MAP = [ [23, 1, "\u5B50"], [1, 3, "\u4E11"], [3, 5, "\u5BC5"], [5, 7, "\u536F"], [7, 9, "\u8FB0"], [9, 11, "\u5DF3"], [11, 13, "\u5348"], [13, 15, "\u672A"], [15, 17, "\u7533"], [17, 19, "\u9149"], [19, 21, "\u620C"], [21, 23, "\u4EA5"] ]; var ELEMENT_RELATIONSHIPS = { WOOD: { WATER: "Resource", WOOD: "Companion", FIRE: "Output", EARTH: "Wealth", METAL: "Control" }, FIRE: { WOOD: "Resource", FIRE: "Companion", EARTH: "Output", METAL: "Wealth", WATER: "Control" }, EARTH: { FIRE: "Resource", EARTH: "Companion", METAL: "Output", WATER: "Wealth", WOOD: "Control" }, METAL: { EARTH: "Resource", METAL: "Companion", WATER: "Output", WOOD: "Wealth", FIRE: "Control" }, WATER: { METAL: "Resource", WATER: "Companion", WOOD: "Output", FIRE: "Wealth", EARTH: "Control" } }; var RELATIONSHIP_WEIGHTS = { "Resource": 3, "Companion": 2.5, "Output": 2, "Wealth": 1.2, "Control": 1.2 }; var NOBLEMAN_MAP = { "\u7532": ["\u4E11", "\u672A"], "\u4E59": ["\u5B50", "\u7533"], "\u4E19": ["\u4EA5", "\u9149"], "\u4E01": ["\u4EA5", "\u9149"], "\u620A": ["\u4E11", "\u672A"], "\u5DF1": ["\u5B50", "\u7533"], "\u5E9A": ["\u4E11", "\u672A"], "\u8F9B": ["\u5BC5", "\u5348"], "\u58EC": ["\u5DF3", "\u536F"], "\u7678": ["\u5DF3", "\u536F"] }; var INTELLIGENCE_MAP = { "\u7532": "\u5DF3", "\u4E59": "\u5348", "\u4E19": "\u7533", "\u4E01": "\u9149", "\u620A": "\u7533", "\u5DF1": "\u9149", "\u5E9A": "\u4EA5", "\u8F9B": "\u5B50", "\u58EC": "\u5BC5", "\u7678": "\u536F" }; var PEACH_BLOSSOM_MAP = { "\u5BC5": "\u536F", "\u5348": "\u536F", "\u620C": "\u536F", // Tiger, Horse, Dog -> Rabbit "\u5DF3": "\u5348", "\u9149": "\u5348", "\u4E11": "\u5348", // Snake, Rooster, Ox -> Horse "\u7533": "\u9149", "\u5B50": "\u9149", "\u8FB0": "\u9149", // Monkey, Rat, Dragon -> Rooster "\u4EA5": "\u5B50", "\u536F": "\u5B50", "\u672A": "\u5B50" // Pig, Rabbit, Goat -> Rat }; var SKY_HORSE_MAP = { "\u4EA5": "\u5DF3", "\u536F": "\u5DF3", "\u672A": "\u5DF3", "\u5DF3": "\u4EA5", "\u9149": "\u4EA5", "\u4E11": "\u4EA5", "\u5BC5": "\u7533", "\u5348": "\u7533", "\u620C": "\u7533", "\u7533": "\u5BC5", "\u5B50": "\u5BC5", "\u8FB0": "\u5BC5" }; var LIFE_CYCLE_NAMES = { 1: "Birth", 2: "Bath", 3: "Youth", 4: "Thriving", 5: "Prosperous", 6: "Weakening", 7: "Sick", 8: "Death", 9: "Grave", 10: "Extinction", 11: "Conceived", 12: "Nourishing" }; var GUA_DIRECTIONS = { 1: { lucky: ["SE", "E", "S", "N"], unlucky: ["NW", "W", "SW", "NE"] }, // Kan 2: { lucky: ["NE", "W", "NW", "SW"], unlucky: ["E", "SE", "S", "N"] }, // Kun 3: { lucky: ["S", "N", "SE", "E"], unlucky: ["SW", "NW", "W", "NE"] }, // Zhen 4: { lucky: ["N", "S", "E", "SE"], unlucky: ["NE", "SW", "NW", "W"] }, // Xun 6: { lucky: ["W", "NE", "SW", "NW"], unlucky: ["S", "E", "N", "SE"] }, // Qian 7: { lucky: ["NW", "SW", "NE", "W"], unlucky: ["E", "S", "SE", "N"] }, // Dui 8: { lucky: ["SW", "NW", "W", "NE"], unlucky: ["N", "SE", "E", "S"] }, // Gen 9: { lucky: ["E", "SE", "N", "S"], unlucky: ["W", "NE", "SW", "NW"] } // Li }; var GUA_GROUPS = { 1: "East", 2: "West", 3: "East", 4: "East", 6: "West", 7: "West", 8: "West", 9: "East" }; var SOLAR_TERM_KEYS = { MinorCold: "minor_cold", MajorCold: "major_cold", StartOfSpring: "start_of_spring", SpringShowers: "spring_showers", AwakeningOfInsects: "awakening_of_insects", SpringEquinox: "spring_equinox", PureBrightness: "pure_brightness", GrainRain: "grain_rain", StartOfSummer: "start_of_summer", GrainBuds: "grain_buds", GrainInEar: "grain_in_ear", SummerSolstice: "summer_solstice", MinorHeat: "minor_heat", MajorHeat: "major_heat", StartOfAutumn: "start_of_autumn", EndOfHeat: "end_of_heat", WhiteDew: "white_dew", AutumnEquinox: "autumn_equivox", ColdDew: "cold_dew", Frost: "frost", StartOfWinter: "start_of_winter", MinorSnow: "minor_snow", MajorSnow: "major_snow", WinterSolstice: "winter_solstice" }; var INITIAL_SOLAR_TERMS = [ SOLAR_TERM_KEYS.MinorCold, SOLAR_TERM_KEYS.StartOfSpring, SOLAR_TERM_KEYS.AwakeningOfInsects, SOLAR_TERM_KEYS.PureBrightness, SOLAR_TERM_KEYS.StartOfSummer, SOLAR_TERM_KEYS.GrainInEar, SOLAR_TERM_KEYS.MinorHeat, SOLAR_TERM_KEYS.StartOfAutumn, SOLAR_TERM_KEYS.WhiteDew, SOLAR_TERM_KEYS.ColdDew, SOLAR_TERM_KEYS.StartOfWinter, SOLAR_TERM_KEYS.MajorSnow ]; var makePairKey = (el1, el2) => { return [el1, el2].sort((a, b) => a.localeCompare(b)).join(""); }; var STEM_5_COMBINATIONS = [ ["\u7532", "\u5DF1"], ["\u4E59", "\u5E9A"], ["\u4E19", "\u8F9B"], ["\u4E01", "\u58EC"], ["\u620A", "\u7678"] ]; var STEM_5_TRANSFORMATIONS = { [makePairKey("\u7532", "\u5DF1")]: "EARTH", [makePairKey("\u4E59", "\u5E9A")]: "METAL", [makePairKey("\u4E19", "\u8F9B")]: "WATER", [makePairKey("\u4E01", "\u58EC")]: "WOOD", [makePairKey("\u620A", "\u7678")]: "FIRE" }; var STEM_CLASHES = [ ["\u7532", "\u5E9A"], ["\u4E59", "\u8F9B"], ["\u4E19", "\u58EC"], ["\u4E01", "\u7678"], ["\u620A", "\u58EC"], ["\u5DF1", "\u7678"] // These are often considered oppositions/clashes ]; var BRANCH_6_COMBINATIONS = [ ["\u5B50", "\u4E11"], ["\u5BC5", "\u4EA5"], ["\u536F", "\u620C"], ["\u8FB0", "\u9149"], ["\u5DF3", "\u7533"], ["\u5348", "\u672A"] ]; var BRANCH_6_TRANSFORMATIONS = { "\u5B50\u4E11": "EARTH", "\u4EA5\u5BC5": "WOOD", "\u536F\u620C": "FIRE", "\u8FB0\u9149": "METAL", "\u5DF3\u7533": "WATER", "\u5348\u672A": "FIRE" // Note: Can also be Earth depending on context, FIRE is a common default }; var BRANCH_TRINITY_COMBINATIONS = [ { element: "WATER", branches: ["\u7533", "\u5B50", "\u8FB0"] }, // Monkey, Rat, Dragon { element: "WOOD", branches: ["\u4EA5", "\u536F", "\u672A"] }, // Pig, Rabbit, Goat { element: "FIRE", branches: ["\u5BC5", "\u5348", "\u620C"] }, // Tiger, Horse, Dog { element: "METAL", branches: ["\u5DF3", "\u9149", "\u4E11"] } // Snake, Rooster, Ox ]; var BRANCH_DIRECTIONAL_COMBINATIONS = [ { element: "WOOD", branches: ["\u5BC5", "\u536F", "\u8FB0"] }, // Spring: Tiger, Rabbit, Dragon { element: "FIRE", branches: ["\u5DF3", "\u5348", "\u672A"] }, // Summer: Snake, Horse, Goat { element: "METAL", branches: ["\u7533", "\u9149", "\u620C"] }, // Autumn: Monkey, Rooster, Dog { element: "WATER", branches: ["\u4EA5", "\u5B50", "\u4E11"] } // Winter: Pig, Rat, Ox ]; var BRANCH_CLASHES = [ ["\u5B50", "\u5348"], ["\u4E11", "\u672A"], ["\u5BC5", "\u7533"], ["\u536F", "\u9149"], ["\u8FB0", "\u620C"], ["\u5DF3", "\u4EA5"] ]; var BRANCH_HARMS = [ ["\u5B50", "\u672A"], ["\u4E11", "\u5348"], ["\u5BC5", "\u5DF3"], ["\u536F", "\u8FB0"], ["\u7533", "\u4EA5"], ["\u9149", "\u620C"] ]; var BRANCH_PUNISHMENTS = [ // Ungrateful Punishment (丑-戌, 戌-未, 未-丑) - Requires 2 or 3 { type: "Ungrateful", branches: ["\u4E11", "\u620C", "\u672A"], description: "Ungrateful Punishment (Requires \u4E11-\u620C, \u620C-\u672A, or \u672A-\u4E11; full if all 3)", minRequired: 2 }, // Bullying Punishment (寅-巳, 巳-申, 申-寅) - Requires 2 or 3 { type: "Bullying", branches: ["\u5BC5", "\u5DF3", "\u7533"], description: "Bullying Punishment (Requires \u5BC5-\u5DF3, \u5DF3-\u7533, or \u7533-\u5BC5; full if all 3)", minRequired: 2 }, // Uncivilized Punishment (子-卯) - Requires both { type: "Uncivilized", branches: ["\u5B50", "\u536F"], description: "Uncivilized Punishment (Requires \u5B50+\u536F)", minRequired: 2 }, // Self Punishment (辰-辰, 午-午, 酉-酉, 亥-亥, 卯-卯) - Requires 2 of the same { type: "Self", branches: ["\u8FB0"], description: "Self Punishment (Requires \u8FB0+\u8FB0)" }, { type: "Self", branches: ["\u5348"], description: "Self Punishment (Requires \u5348+\u5348)" }, { type: "Self", branches: ["\u9149"], description: "Self Punishment (Requires \u9149+\u9149)" }, { type: "Self", branches: ["\u4EA5"], description: "Self Punishment (Requires \u4EA5+\u4EA5)" }, { type: "Self", branches: ["\u536F"], description: "Self Punishment (Requires \u536F+\u536F)" } // <<< ENSURE THIS IS PRESENT ]; var BRANCH_DESTRUCTIONS = [ ["\u5B50", "\u9149"], ["\u536F", "\u5348"], ["\u8FB0", "\u4E11"], ["\u5DF3", "\u7533"], ["\u672A", "\u620C"], ["\u5BC5", "\u4EA5"] ]; // src/utils/helpers.ts function getEarthlyBranchByChar(char) { return EARTHLY_BRANCHES_DATA.find((branch) => branch.character === char); } function getHeavenlyStemByValue(value) { return HEAVENLY_STEMS_DATA[value - 1]; } function getEarthlyBranchByValue(value) { return EARTHLY_BRANCHES_DATA[value - 1]; } function getNaYin(stemName, branchName) { const key = `${stemName} ${branchName}`; const data = NA_YIN_MAP[key]; if (!data) { console.warn(`Na Yin mapping not found for key: ${key}`); return null; } ; return { name: data.name, elementName: data.element, // English name elementValue: data.value // Numeric value }; } var elementCycle = ["WOOD", "FIRE", "EARTH", "METAL", "WATER"]; function produces(el1, el2) { const index1 = elementCycle.indexOf(el1); if (index1 === -1) return false; const nextIndex = (index1 + 1) % elementCycle.length; return elementCycle[nextIndex] === el2; } function controls(el1, el2) { const index1 = elementCycle.indexOf(el1); if (index1 === -1) return false; const controlledIndex = (index1 + 2) % elementCycle.length; return elementCycle[controlledIndex] === el2; } function ConvertTermToBranch(termName) { const termToBranchCharMap = { [SOLAR_TERM_KEYS.MinorCold]: "\u4E11", [SOLAR_TERM_KEYS.MajorCold]: "\u4E11", [SOLAR_TERM_KEYS.StartOfSpring]: "\u5BC5", [SOLAR_TERM_KEYS.SpringShowers]: "\u5BC5", [SOLAR_TERM_KEYS.AwakeningOfInsects]: "\u536F", [SOLAR_TERM_KEYS.SpringEquinox]: "\u536F", [SOLAR_TERM_KEYS.PureBrightness]: "\u8FB0", [SOLAR_TERM_KEYS.GrainRain]: "\u8FB0", [SOLAR_TERM_KEYS.StartOfSummer]: "\u5DF3", [SOLAR_TERM_KEYS.GrainBuds]: "\u5DF3", [SOLAR_TERM_KEYS.GrainInEar]: "\u5348", [SOLAR_TERM_KEYS.SummerSolstice]: "\u5348", [SOLAR_TERM_KEYS.MinorHeat]: "\u672A", [SOLAR_TERM_KEYS.MajorHeat]: "\u672A", [SOLAR_TERM_KEYS.StartOfAutumn]: "\u7533", [SOLAR_TERM_KEYS.EndOfHeat]: "\u7533", [SOLAR_TERM_KEYS.WhiteDew]: "\u9149", [SOLAR_TERM_KEYS.AutumnEquinox]: "\u9149", [SOLAR_TERM_KEYS.ColdDew]: "\u620C", [SOLAR_TERM_KEYS.Frost]: "\u620C", [SOLAR_TERM_KEYS.StartOfWinter]: "\u4EA5", [SOLAR_TERM_KEYS.MinorSnow]: "\u4EA5", [SOLAR_TERM_KEYS.MajorSnow]: "\u5B50", [SOLAR_TERM_KEYS.WinterSolstice]: "\u5B50" }; const branchChar = termToBranchCharMap[termName]; if (!branchChar) { console.warn(`No branch mapping found for solar term: ${termName}`); return null; } return getEarthlyBranchByChar(branchChar) || null; } function getStemRuleByFiveTigers(yearStemValue) { switch (yearStemValue) { case 1: case 6: return 3; // 甲己 -> 丙寅 case 2: case 7: return 5; // 乙庚 -> 戊寅 case 3: case 8: return 7; // 丙辛 -> 庚寅 case 4: case 9: return 9; // 丁壬 -> 壬寅 case 5: case 10: return 1; // 戊癸 -> 甲寅 default: return 0; } } function getStemRuleByFiveRats(dayStemValue) { switch (dayStemValue) { case 1: case 6: return 1; // 甲己 -> 甲子 case 2: case 7: return 3; // 乙庚 -> 丙子 case 3: case 8: return 5; // 丙辛 -> 戊子 case 4: case 9: return 7; // 丁壬 -> 庚子 case 5: case 10: return 9; // 戊癸 -> 壬子 default: return 0; } } function getLifeCycleRule(dayStemValue) { switch (dayStemValue) { case 1: return 12; // 甲 -> Hợi (Pig=12) - Go returned 10 (Pig) case 2: return 7; // 乙 -> Ngọ (Horse=7) - Go returned 5 (Horse) case 3: return 3; // 丙 -> Dần (Tiger=3) - Go returned 1 (Tiger) case 5: return 3; // 戊 -> Dần (Tiger=3) - Go returned 1 (Tiger) case 4: return 10; // 丁 -> Dậu (Rooster=10) - Go returned 8 (Rooster) case 6: return 10; // 己 -> Dậu (Rooster=10) - Go returned 8 (Rooster) case 7: return 6; // 庚 -> Tỵ (Snake=6) - Go returned 4 (Snake) case 8: return 1; // 辛 -> Tí (Rat=1) - Go returned 11 (Rat) case 9: return 9; // 壬 -> Thân (Monkey=9) - Go returned 7 (Monkey) case 10: return 4; // 癸 -> Mão (Rabbit=4) - Go returned 2 (Rabbit) default: return 0; } } function convertValueToLifeCycle(value) { return LIFE_CYCLE_NAMES[value]; } function getLifeCycleStage(branchValue, lifeCycleStartBranchValue, dayMasterYinYang) { let diff; if (dayMasterYinYang === "Yang") { diff = branchValue - lifeCycleStartBranchValue; } else { diff = lifeCycleStartBranchValue - branchValue; } let cycleIndex = (diff % 12 + 12) % 12; const lifeCycleValue = cycleIndex + 1; return convertValueToLifeCycle(lifeCycleValue); } // src/assets/solar-term.json var solar_term_default = { "1899": { year: "1899", data: { autumn_equinox: "1899-09-23 03:29:15.103+00:00", awakening_of_insects: "1899-03-05 16:44:08.870+00:00", cold_dew: "1899-10-08 09:43:57.283+00:00", end_of_heat: "1899-08-23 06:00:14.880+00:00", frost: "1899-10-23 12:40:40.601+00:00", grain_buds: "1899-05-21 04:14:21.719+00:00", grain_in_ear: "1899-06-05 19:32:02.898+00:00", grain_rain: "1899-04-20 04:57:13.797+00:00", major_cold: "1899-01-20 04:14:26.057+00:00", major_heat: "1899-07-22 23:03:38.584+00:00", minor_cold: "1899-01-05 10:51:03.143+00:00", minor_heat: "1899-07-07 05:47:53.520+00:00", minor_snow: "1899-11-22 10:07:00.982+00:00", pure_brightness: "1899-04-04 21:45:44.676+00:00", spring_equinox: "1899-03-20 17:42:16.230+00:00", spring_showers: "1899-02-18 18:30:26.490+00:00", start_of_autumn: "1899-08-07 15:30:14.611+00:00", start_of_spring: "1899-02-03 22:33:24.769+00:00", start_of_summer: "1899-05-05 15:16:00.310+00:00", start_of_winter: "1899-11-07 12:45:50.274+00:00", summer_solstice: "1899-06-21 12:13:45.752+00:00", white_dew: "1899-09-07 18:15:42.236+00:00", major_snow: "1899-12-07 07:05:50.777+00:00", winter_solstice: "1899-12-22 00:56:09.527+00:00" } }, "1900": { year: "1900", data: { autumn_equinox: "1900-09-23 12:20:15.540+00:00", awakening_of_insects: "1900-03-06 00:21:55.825+00:00", cold_dew: "1900-10-08 18:13:13.479+00:00", end_of_heat: "1900-08-23 15:19:54.435+00:00", frost: "1900-10-23 20:55:20.915+00:00", grain_buds: "1900-05-21 13:17:01.069+00:00", grain_in_ear: "1900-06-06 04:39:01.195+00:00", grain_rain: "1900-04-20 13:27:11.496+00:00", major_cold: "1900-01-20 11:32:29.605+00:00", major_heat: "1900-07-23 08:36:12.842+00:00", major_snow: "1900-12-07 12:55:55.631+00:00", minor_cold: "1900-01-05 18:04:02.494+00:00", minor_heat: "1900-07-07 15:10:14.562+00:00", minor_snow: "1900-11-22 17:47:55.141+00:00", pure_brightness: "1900-04-05 05:52:45.110+00:00", spring_equinox: "1900-03-21 01:39:05.710+00:00", spring_showers: "1900-02-19 02:01:18.701+00:00", start_of_autumn: "1900-08-08 00:50:39.666+00:00", start_of_spring: "1900-02-04 05:51:35.234+00:00", start_of_summer: "1900-05-05 23:55:16.911+00:00", start_of_winter: "1900-11-07 20:39:48.574+00:00", summer_solstice: "1900-06-21 21:39:51.677+00:00", white_dew: "1900-09-08 03:16:42.895+00:00", winter_solstice: "1900-12-22 06:41:38.514+00:00" } }, "1901": { year: "1901", data: { autumn_equinox: "1901-09-23 18:09:00.512+00:00", awakening_of_insects: "1901-03-06 06:10:56.872+00:00", cold_dew: "1901-10-09 00:06:32.675+00:00", end_of_heat: "1901-08-23 21:07:33.744+00:00", frost: "1901-10-24 02:46:18.358+00:00", grain_buds: "1901-05-21 19:04:44.489+00:00", grain_in_ear: "1901-06-06 10:36:32.195+00:00", grain_rain: "1901-04-20 19:13:29.969+00:00", major_cold: "1901-01-20 17:16:31.641+00:00", major_heat: "1901-07-23 14:23:51.454+00:00", major_snow: "1901-12-07 18:52:43.321+00:00", minor_cold: "1901-01-05 23:53:27.683+00:00", minor_heat: "1901-07-07 21:07:39.748+00:00", minor_snow: "1901-11-22 23:41:18.162+00:00", pure_brightness: "1901-04-05 11:44:25.559+00:00", spring_equinox: "1901-03-21 07:23:39.378+00:00", spring_showers: "1901-02-19 07:44:58.573+00:00", start_of_autumn: "1901-08-08 06:46:11.244+00:00", start_of_spring: "1901-02-04 11:39:56.166+00:00", start_of_summer: "1901-05-06 05:50:28.412+00:00", start_of_winter: "1901-11-08 02:34:35.065+00:00", summer_solstice: "1901-06-22 03:27:52.323+00:00", white_dew: "1901-09-08 09:10:19.830+00:00", winter_solstice: "1901-12-22 12:36:40.612+00:00" } }, "1902": { year: "1902", data: { autumn_equinox: "1902-09-23 23:55:24.027+00:00", awakening_of_insects: "1902-03-06 12:07:35.907+00:00", cold_dew: "1902-10-09 05:45:13.989+00:00", end_of_heat: "1902-08-24 02:53:06.193+00:00", frost: "1902-10-24 08:35:42.178+00:00", grain_buds: "1902-05-22 00:53:36.857+00:00", grain_in_ear: "1902-06-06 16:19:52.354+00:00", grain_rain: "1902-04-21 01:04:12.715+00:00", major_cold: "1902-01-20 23:12:00.409+00:00", major_heat: "1902-07-23 20:09:55.457+00:00", major_snow: "1902-12-08 00:41:05.652+00:00", minor_cold: "1902-01-06 05:51:38.480+00:00", minor_heat: "1902-07-08 02:46:24.822+00:00", minor_snow: "1902-11-23 05:35:28.610+00:00", pure_brightness: "1902-04-05 17:37:30.442+00:00", spring_equinox: "1902-03-21 13:16:37.780+00:00", spring_showers: "1902-02-19 13:39:45.984+00:00", start_of_autumn: "1902-08-08 12:22:20.567+00:00", start_of_spring: "1902-02-04 17:38:12.921+00:00", start_of_summer: "1902-05-06 11:38:52.804+00:00", start_of_winter: "1902-11-08 08:17:49.858+00:00", summer_solstice: "1902-06-22 09:15:12.136+00:00", white_dew: "1902-09-08 14:46:29.726+00:00", winter_solstice: "1902-12-22 18:35:35.455+00:00" } }, "1903": { year: "1903", data: { autumn_equinox: "1903-09-24 05:43:44.903+00:00", awakening_of_insects: "1903-03-06 17:58:56.435+00:00", cold_dew: "1903-10-09 11:41:46.774+00:00", end_of_heat: "1903-08-24 08:41:39.510+00:00", frost: "1903-10-24 14:23:06.540+00:00", grain_buds: "1903-05-22 06:45:05.541+00:00", grain_in_ear: "1903-06-06 22:07:11.970+00:00", grain_rain: "1903-04-21 06:58:42.866+00:00", major_cold: "1903-01-21 05:13:35.649+00:00", major_heat: "1903-07-24 01:58:49.682+00:00", major_snow: "1903-12-08 06:35:22.793+00:00", minor_cold: "1903-01-06 11:43:47.049+00:00", minor_heat: "1903-07-08 08:36:40.229+00:00", minor_snow: "1903-11-23 11:21:28.429+00:00", pure_brightness: "1903-04-05 23:25:58.252+00:00", spring_equinox: "1903-03-21 19:14:50.379+00:00", spring_showers: "1903-02-19 19:40:51.988+00:00", start_of_autumn: "1903-08-08 18:15:53.310+00:00", start_of_spring: "1903-02-04 23:31:20.393+00:00", start_of_summer: "1903-05-06 17:25:26.775+00:00", start_of_winter: "1903-11-08 14:13:26.273+00:00", summer_solstice: "1903-06-22 15:05:00.046+00:00", white_dew: "1903-09-08 20:42:24.429+00:00", winter_solstice: "1903-12-23 00:00:03.866+00:00" } }, "1904": { year: "1904", data: { autumn_equinox: "1904-09-23 11:40:15.896+00:00", awakening_of_insects: "1904-03-05 23:51:42.420+00:00", cold_dew: "1904-10-08 17:35:38.370+00:00", end_of_heat: "1904-08-23 14:36:27.591+00:00", frost: "1904-10-23 20:19:05.791+00:00", grain_buds: "1904-05-21 12:28:59.981+00:00", grain_in_ear: "1904-06-06 04:01:01.822+00:00", grain_rain: "1904-04-20 12:42:12.407+00:00", major_cold: "1904-01-21 10:57:54.280+00:00", major_heat: "1904-07-23 07:49:38.789+00:00", major_snow: "1904-12-07 12:25:24.811+00:00", minor_cold: "1904-01-06 17:37:06.408+00:00", minor_heat: "1904-07-07 14:31:45.271+00:00", minor_snow: "1904-11-22 17:15:56.124+00:00", pure_brightness: "1904-04-05 05:18:54.590+00:00", spring_equinox: "1904-03-21 00:58:36.806+00:00", spring_showers: "1904-02-20 01:24:54.091+00:00", start_of_autumn: "1904-08-08 00:11:54.888+00:00", start_of_spring: "1904-02-05 05:24:10.951+00:00", start_of_summer: "1904-05-05 23:18:38.249+00:00", start_of_winter: "1904-11-07 20:05:02.549+00:00", summer_solstice: "1904-06-21 20:51:24.470+00:00", white_dew: "1904-09-08 02:38:02.252+00:00", winter_solstice: "1904-12-22 06:13:59.679+00:00" } }, "1905": { year: "1905", data: { autumn_equinox: "1905-09-23 17:30:00.246+00:00", awakening_of_insects: "1905-03-06 05:45:39.064+00:00", cold_dew: "1905-10-08 23:19:39.349+00:00", end_of_heat: "1905-08-23 20:28:40.054+00:00", frost: "1905-10-24 02:07:59.299+00:00", grain_buds: "1905-05-21 18:31:19.919+00:00", grain_in_ear: "1905-06-06 09:53:37.266+00:00", grain_rain: "1905-04-20 18:43:48.174+00:00", major_cold: "1905-01-20 16:51:58.494+00:00", major_heat: "1905-07-23 13:45:40.689+00:00", major_snow: "1905-12-07 18:10:50.851+00:00", minor_cold: "1905-01-05 23:27:10.863+00:00", minor_heat: "1905-07-07 20:20:03.231+00:00", minor_snow: "1905-11-22 23:04:57.001+00:00", pure_brightness: "1905-04-05 11:14:32.089+00:00", spring_equinox: "1905-03-21 06:57:34.450+00:00", spring_showers: "1905-02-19 07:21:00.624+00:00", start_of_autumn: "1905-08-08 05:57:00.371+00:00", start_of_spring: "1905-02-04 11:15:52.033+00:00", start_of_summer: "1905-05-06 05:14:07.982+00:00", start_of_winter: "1905-11-08 01:49:49.880+00:00", summer_solstice: "1905-06-22 02:51:25.648+00:00", white_dew: "1905-09-08 08:21:49.766+00:00", winter_solstice: "1905-12-22 12:03:45.301+00:00" } }, "1906": { year: "1906", data: { autumn_equinox: "1906-09-23 23:15:02.387+00:00", awakening_of_insects: "1906-03-06 11:36:09.307+00:00", cold_dew: "1906-10-09 05:14:57.269+00:00", end_of_heat: "1906-08-24 02:13:34.814+00:00", frost: "1906-10-24 07:54:46.296+00:00", grain_buds: "1906-05-22 00:24:58.768+00:00", grain_in_ear: "1906-06-06 15:48:57.793+00:00", grain_rain: "1906-04-21 00:39:14.219+00:00", major_cold: "1906-01-20 22:43:18.553+00:00", major_heat: "1906-07-23 19:32:35.387+00:00", major_snow: "1906-12-08 00:09:29.283+00:00", minor_cold: "1906-01-06 05:13:30.640+00:00", minor_heat: "1906-07-08 02:15:19.172+00:00", minor_snow: "1906-11-23 04:53:54.116+00:00", pure_brightness: "1906-04-05 17:07:19.966+00:00", spring_equinox: "1906-03-21 12:52:51.302+00:00", spring_showers: "1906-02-19 13:14:31.398+00:00", start_of_autumn: "1906-08-08 11:51:37.594+00:00", start_of_spring: "1906-02-04 17:03:56.646+00:00", start_of_summer: "1906-05-06 11:08:31.743+00:00", start_of_winter: "1906-11-08 07:46:57.113+00:00", summer_solstice: "1906-06-22 08:41:51.317+00:00", white_dew: "1906-09-08 14:16:16.122+00:00", winter_solstice: "1906-12-22 17:53:20.502+00:00" } }, "1907": { year: "1907", data: { autumn_equinox: "1907-09-24 05:08:56.697+00:00", awakening_of_insects: "1907-03-06 17:27:08.060+00:00", cold_dew: "1907-10-09 11:02:45.790+00:00", end_of_heat: "1907-08-24 08:03:26.470+00:00", frost: "1907-10-24 13:51:35.199+00:00", grain_buds: "1907-05-22 06:03:17.946+00:00", grain_in_ear: "1907-06-06 21:33:00.697+00:00", grain_rain: "1907-04-21 06:17:15.872+00:00", major_cold: "1907-01-21 04:30:50.228+00:00", major_heat: "1907-07-24 01:18:00.019+00:00", major_snow: "1907-12-08 05:59:30.013+00:00", minor_cold: "1907-01-06 11:11:27.595+00:00", minor_heat: "1907-07-08 07:59:13.417+00:00", minor_snow: "1907-11-23 10:52:07.028+00:00", pure_brightness: "1907-04-05 22:54:49.832+00:00", spring_equinox: "1907-03-21 18:33:02.587+00:00", spring_showers: "1907-02-19 18:58:20.765+00:00", start_of_autumn: "1907-08-08 17:36:01.050+00:00", start_of_spring: "1907-02-04 22:58:51.249+00:00", start_of_summer: "1907-05-06 16:53:39.349+00:00", start_of_winter: "1907-11-08 13:36:20.962+00:00", summer_solstice: "1907-06-22 14:23:03.040+00:00", white_dew: "1907-09-08 20:02:06.120+00:00", winter_solstice: "1907-12-22 23:51:35.801+00:00" } }, "1908": { year: "1908", data: { autumn_equinox: "1908-09-23 10:58:19.102+00:00", awakening_of_insects: "1908-03-05 23:13:38.680+00:00", cold_dew: "1908-10-08 16:50:55.172+00:00", end_of_heat: "1908-08-23 13:57:03.395+00:00", frost: "1908-10-23 19:36:51.653+00:00", grain_buds: "1908-05-21 11:58:10.366+00:00", grain_in_ear: "1908-06-06 03:19:07.037+00:00", grain_rain: "1908-04-20 12:11:18.226+00:00", major_cold: "1908-01-21 10:28:07.537+00:00", major_heat: "1908-07-23 07:14:09.230+00:00", major_snow: "1908-12-07 11:43:41.350+00:00", minor_cold: "1908-01-06 17:01:10.821+00:00", minor_heat: "1908-07-07 13:48:04.074+00:00", minor_snow: "1908-11-22 16:34:41.359+00:00", pure_brightness: "1908-04-05 04:39:50.139+00:00", spring_equinox: "1908-03-21 00:27:17.003+00:00", spring_showers: "1908-02-20 00:53:57.469+00:00", start_of_autumn: "1908-08-07 23:26:46.459+00:00", start_of_spring: "1908-02-05 04:47:17.344+00:00", start_of_summer: "1908-05-05 22:38:23.372+00:00", start_of_winter: "1908-11-07 19:22:05.737+00:00", summer_solstice: "1908-06-21 20:19:06.073+00:00", white_dew: "1908-09-08 01:52:21.379+00:00", winter_solstice: "1908-12-22 05:33:28.613+00:00" } }, "1909": { year: "1909", data: { autumn_equinox: "1909-09-23 16:44:33.851+00:00", awakening_of_insects: "1909-03-06 05:00:51.276+00:00", cold_dew: "1909-10-08 22:43:11.242+00:00", end_of_heat: "1909-08-23 19:43:35.346+00:00", frost: "1909-10-24 01:22:34.432+00:00", grain_buds: "1909-05-21 17:44:56.098+00:00", grain_in_ear: "1909-06-06 09:14:00.039+00:00", grain_rain: "1909-04-20 17:57:48.863+00:00", major_cold: "1909-01-20 16:10:59.848+00:00", major_heat: "1909-07-23 13:00:30.991+00:00", major_snow: "1909-12-07 17:34:53.330+00:00", minor_cold: "1909-01-05 22:45:17.594+00:00", minor_heat: "1909-07-07 19:44:01.438+00:00", minor_snow: "1909-11-22 22:20:18.403+00:00", pure_brightness: "1909-04-05 10:29:28.823+00:00", spring_equinox: "1909-03-21 06:13:00.527+00:00", spring_showers: "1909-02-19 06:38:24.582+00:00", start_of_autumn: "1909-08-08 05:22:32.382+00:00", start_of_spring: "1909-02-04 10:32:35.820+00:00", start_of_summer: "1909-05-06 04:30:53.173+00:00", start_of_winter: "1909-11-08 01:13:06.967+00:00", summer_solstice: "1909-06-22 02:05:35.830+00:00", white_dew: "1909-09-08 07:46:38.799+00:00", winter_solstice: "1909-12-22 11:19:50.894+00:00" } }, "1910": { year: "1910", data: { autumn_equinox: "1910-09-23 22:30:46.649+00:00", awakening_of_insects: "1910-03-06 10:56:35.183+00:00", cold_dew: "1910-10-09 04:21:10.141+00:00", end_of_heat: "1910-08-24 01:27:23.967+00:00", frost: "1910-10-24 07:11:10.073+00:00", grain_buds: "1910-05-21 23:30:12.014+00:00", grain_in_ear: "1910-06-06 14:56:25.029+00:00", grain_rain: "1910-04-20 23:45:46.093+00:00", major_cold: "1910-01-20 21:59:00.417+00:00", major_heat: "1910-07-23 18:42:59.943+00:00", major_snow: "1910-12-07 23:16:57.554+00:00", minor_cold: "1910-01-06 04:38:01.211+00:00", minor_heat: "1910-07-08 01:21:05.950+00:00", minor_snow: "1910-11-23 04:10:53.047+00:00", pure_brightness: "1910-04-05 16:22:59.472+00:00", spring_equinox: "1910-03-21 12:02:55.890+00:00", spring_showers: "1910-02-19 12:28:11.177+00:00", start_of_autumn: "1910-08-08 10:57:13.450+00:00", start_of_spring: "1910-02-04 16:27:26.278+00:00", start_of_summer: "1910-05-06 10:19:23.730+00:00", start_of_winter: "1910-11-08 06:53:27.963+00:00", summer_solstice: "1910-06-22 07:48:44.989+00:00", white_dew: "1910-09-08 13:22:14.881+00:00", winter_solstice: "1910-12-22 17:11:46.648+00:00" } }, "1911": { year: "1911", data: { autumn_equinox: "1911-09-24 04:17:34.414+00:00", awakening_of_insects: "1911-03-06 16:38:53.858+00:00", cold_dew: "1911-10-09 10:14:58.377+00:00", end_of_heat: "1911-08-24 07:13:00.857+00:00", frost: "1911-10-24 12:58:14.479+00:00", grain_buds: "1911-05-22 05:18:36.945+00:00", grain_in_ear: "1911-06-06 20:37:56.075+00:00", grain_rain: "1911-04-21 05:35:59.266+00:00", major_cold: "1911-01-21 03:51:27.709+00:00", major_heat: "1911-07-24 00:28:41.586+00:00", major_snow: "1911-12-08 05:07:37.542+00:00", minor_cold: "1911-01-06 10:20:57.039+00:00", minor_heat: "1911-07-08 07:04:58.689+00:00", minor_snow: "1911-11-23 09:55:57.334+00:00", pure_brightness: "1911-04-05 22:04:34.911+00:00", spring_equinox: "1911-03-21 17:54:24.418+00:00", spring_showers: "1911-02-19 18:20:21.182+00:00", start_of_autumn: "1911-08-08 16:44:28.014+00:00", start_of_spring: "1911-02-04 22:10:20.539+00:00", start_of_summer: "1911-05-06 16:00:21.130+00:00", start_of_winter: "1911-11-08 12:47:03.165+00:00", summer_solstice: "1911-06-22 13:35:34.837+00:00", white_dew: "1911-09-08 19:13:19.173+00:00", winter_solstice: "1911-12-22 22:53:13.809+00:00" } }, "1912": { year: "1912", data: { autumn_equinox: "1912-09-23 10:08:02.668+00:00", awakening_of_insects: "1912-03-05 22:21:03.135+00:00", cold_dew: "1912-10-08 16:06:46.812+00:00", end_of_heat: "1912-08-23 13:01:22.566+00:00", frost: "1912-10-23 18:50:03.583+00:00", grain_buds: "1912-05-21 10:57:09.646+00:00", grain_in_ear: "1912-06-06 02:27:33.273+00:00", grain_rain: "1912-04-20 11:12:24.352+00:00", major_cold: "1912-01-21 09:29:10.225+00:00", major_heat: "1912-07-23 06:13:43.706+00:00", major_snow: "1912-12-07 10:58:57.753+00:00", minor_cold: "1912-01-06 16:07:32.709+00:00", minor_heat: "1912-07-07 12:56:46.522+00:00", minor_snow: "1912-11-22 15:48:12.103+00:00", pure_brightness: "1912-04-05 03:48:18.590+00:00", spring_equinox: "1912-03-20 23:29:23.078+00:00", spring_showers: "1912-02-19 23:55:38.241+00:00", start_of_autumn: "1912-08-07 22:37:16.417+00:00", start_of_spring: "1912-02-05 03:53:35.417+00:00", start_of_summer: "1912-05-05 21:47:06.582+00:00", start_of_winter: "1912-11-07 18:38:42.695+00:00", summer_solstice: "1912-06-21 19:16:55.240+00:00", white_dew: "1912-09-08 01:05:43.962+00:00", winter_solstice: "1912-12-22 04:44:43.397+00:00" } }, "1913": { year: "1913", data: { autumn_equinox: "1913-09-23 15:52:46.600+00:00", awakening_of_insects: "1913-03-06 04:09:01.600+00:00", cold_dew: "1913-10-08 21:43:42.096+00:00", end_of_heat: "1913-08-23 18:48:14.442+00:00", frost: "1913-10-24 00:34:53.163+00:00", grain_buds: "1913-05-21 16:49:54.513+00:00", grain_in_ear: "1913-06-06 08:13:28.449+00:00", grain_rain: "1913-04-20 17:02:54.404+00:00", major_cold: "1913-01-20 15:19:08.492+00:00", major_heat: "1913-07-23 12:03:45.866+00:00", major_snow: "1913-12-07 16:41:04.893+00:00", minor_cold: "1913-01-05 21:57:58.325+00:00", minor_heat: "1913-07-07 18:38:56.554+00:00", minor_snow: "1913-11-22 21:35:16.342+00:00", pure_brightness: "1913-04-05 09:35:54.878+00:00", spring_equinox: "1913-03-21 05:17:59.212+00:00", spring_showers: "1913-02-19 05:44:15.719+00:00", start_of_autumn: "1913-08-08 04:15:51.462+00:00", start_of_spring: "1913-02-04 09:42:41.997+00:00", start_of_summer: "1913-05-06 03:34:42.744+00:00", start_of_winter: "1913-11-08 00:17:45.152+00:00", summer_solstice: "1913-06-22 01:09:30.737+00:00", white_dew: "1913-09-08 06:42:26.273+00:00", winter_solstice: "1913-12-22 10:34:54.701+00:00" } }, "1914": { year: "1914", data: { autumn_equinox: "1914-09-23 21:33:49.067+00:00", awakening_of_insects: "1914-03-06 09:55:53.509+00:00", cold_dew: "1914-10-09 03:34:50.550+00:00", end_of_heat: "1914-08-24 00:29:38.221+00:00", frost: "1914-10-24 06:17:17.652+00:00", grain_buds: "1914-05-21 22:37:40.601+00:00", grain_in_ear: "1914-06-06 13:59:59.801+00:00", grain_rain: "1914-04-20 22:53:15.486+00:00", major_cold: "1914-01-20 21:11:51.835+00:00", major_heat: "1914-07-23 17:46:57.480+00:00", major_snow: "1914-12-07 22:37:09.116+00:00", minor_cold: "1914-01-06 03:42:55.147+00:00", minor_heat: "1914-07-08 00:27:16.023+00:00", minor_snow: "1914-11-23 03:20:23.622+00:00", pure_brightness: "1914-04-05 15:21:54.453+00:00", spring_equinox: "1914-03-21 11:10:45.209+00:00", spring_showers: "1914-02-19 11:37:57.578+00:00", start_of_autumn: "1914-08-08 10:05:15.510+00:00", start_of_spring: "1914-02-04 15:29:20.549+00:00", start_of_summer: "1914-05-06 09:20:05.783+00:00", start_of_winter: "1914-11-08 06:11:04.171+00:00", summer_solstice: "1914-06-22 06:55:04.127+00:00", white_dew: "1914-09-08 12:32:30.321+00:00", winter_solstice: "1914-12-22 16:22:26.232+00:00" } }, "1915": { year: "1915", data: { autumn_equinox: "1915-09-24 03:23:49.099+00:00", awakening_of_insects: "1915-03-06 15:48:19.021+00:00", cold_dew: "1915-10-09 09:20:55.600+00:00", end_of_heat: "1915-08-24 06:15:02.955+00:00", frost: "1915-10-24 12:09:41.904+00:00", grain_buds: "1915-05-22 04:10:27.631+00:00", grain_in_ear: "1915-06-06 19:40:10.468+00:00", grain_rain: "1915-04-21 04:28:50.075+00:00", major_cold: "1915-01-21 02:59:34.041+00:00", major_heat: "1915-07-23 23:26:25.506+00:00", major_snow: "1915-12-08 04:23:56.658+00:00", minor_cold: "1915-01-06 09:40:20.016+00:00", minor_heat: "1915-07-08 06:07:48.663+00:00", minor_snow: "1915-11-23 09:13:30.127+00:00", pure_brightness: "1915-04-05 21:09:17.887+00:00", spring_equinox: "1915-03-21 16:51:18.270+00:00", spring_showers: "1915-02-19 17:23:06.789+00:00", start_of_autumn: "1915-08-08 15:47:45.158+00:00", start_of_spring: "1915-02-04 21:25:28.796+00:00", start_of_summer: "1915-05-06 15:02:47.759+00:00", start_of_winter: "1915-11-08 11:57:40.889+00:00", summer_solstice: "1915-06-22 12:29:24.008+00:00", white_dew: "1915-09-08 18:17:08.826+00:00", winter_solstice: "1915-12-22 22:15:47.998+00:00" } }, "1916": { year: "1916", data: { autumn_equinox: "1916-09-23 09:14:46.615+00:00", awakening_of_insects: "1916-03-05 21:37:25.506+00:00", cold_dew: "1916-10-08 15:07:54.430+00:00", end_of_heat: "1916-08-23 12:08:34.592+00:00", frost: "1916-10-23 17:57:14.489+00:00", grain_buds: "1916-05-21 10:05:54.386+00:00", grain_in_ear: "1916-06-06 01:25:44.745+00:00", grain_rain: "1916-04-20 10:24:39.031+00:00", major_cold: "1916-01-21 08:53:37.008+00:00", major_heat: "1916-07-23 05:21:12.775+00:00", major_snow: "1916-12-07 10:06:13.772+00:00", minor_cold: "1916-01-06 15:27:50.976+00:00", minor_heat: "1916-07-07 11:53:38.282+00:00", minor_snow: "1916-11-22 14:57:48.700+00:00", pure_brightness: "1916-04-05 02:57:53.646+00:00", spring_equinox: "1916-03-20 22:46:54.189+00:00", spring_showers: "1916-02-19 23:18:01.983+00:00", start_of_autumn: "1916-08-07 21:35:00.087+00:00", start_of_spring: "1916-02-05 03:14:02.740+00:00", start_of_summer: "1916-05-05 20:49:50.926+00:00", start_of_winter: "1916-11-07 17:42:18.758+00:00", summer_solstice: "1916-06-21 18:24:26.504+00:00", white_dew: "1916-09-08 00:05:03.331+00:00", winter_solstice: "1916-12-22 03:58:34.806+00:00" } }, "1917": { year: "1917", data: { autumn_equinox: "1917-09-23 15:00:10.628+00:00", awakening_of_insects: "1917-03-06 03:24:50.961+00:00", cold_dew: "1917-10-08 21:02:10.936+00:00", end_of_heat: "1917-08-23 17:53:42.113+00:00", frost: "1917-10-23 23:43:41.502+00:00", grain_buds: "1917-05-21 15:58:35.999+00:00", grain_in_ear: "1917-06-06 07:23:14.999+00:00", grain_rain: "1917-04-20 16:17:26.270+00:00", major_cold: "1917-01-20 14:37:23.309+00:00", major_heat: "1917-07-23 11:07:49.361+00:00", major_snow: "1917-12-07 16:01:03.972+00:00", minor_cold: "1917-01-05 21:09:31.600+00:00", minor_heat: "1917-07-07 17:50:16.993+00:00", minor_snow: "1917-11-22 20:44:56.880+00:00", pure_brightness: "1917-04-05 08:49:56.953+00:00", spring_equinox: "1917-03-21 04:37:15.873+00:00", spring_showers: "1917-02-19 05:04:49.226+00:00", start_of_autumn: "1917-08-08 03:30:10.983+00:00", start_of_spring: "1917-02-04 08:57:35.736+00:00", start_of_summer: "1917-05-06 02:45:45.478+00:00", start_of_winter: "1917-11-07 23:36:58.060+00:00", summer_solstice: "1917-06-22 00:14:20.791+00:00", white_dew: "1917-09-08 05:59:23.184+00:00", winter_solstice: "1917-12-22 09:45:42.444+00:00" } }, "1918": { year: "1918", data: { autumn_equinox: "1918-09-23 20:45:40.220+00:00", awakening_of_insects: "1918-03-06 09:20:59.623+00:00", cold_dew: "1918-10-09 02:40:21.037+00:00", end_of_heat: "1918-08-23 23:37:10.613+00:00", frost: "1918-10-24 05:32:48.705+00:00", grain_buds: "1918-05-21 21:45:31.129+00:00", grain_in_ear: "1918-06-06 13:11:02.430+00:00", grain_rain: "1918-04-20 22:05:25.546+00:00", major_cold: "1918-01-20 20:24:35.697+00:00", major_heat: "1918-07-23 16:51:26.867+00:00", major_snow: "1918-12-07 21:46:33.898+00:00", minor_cold: "1918-01-06 03:04:28.748+00:00", minor_heat: "1918-07-07 23:32:12.493+00:00", minor_snow: "1918-11-23 02:38:05.151+00:00", pure_brightness: "1918-04-05 14:45:15.494+00:00", spring_equinox: "1918-03-21 10:25:39.228+00:00", spring_showers: "1918-02-19 10:52:44.123+00:00", start_of_autumn: "1918-08-08 09:07:28.629+00:00", start_of_spring: "1918-02-04 14:53:09.631+00:00", start_of_summer: "1918-05-06 08:38:15.319+00:00", start_of_winter: "1918-11-08 05:18:55.495+00:00", summer_solstice: "1918-06-22 05:59:38.494+00:00", white_dew: "1918-09-08 11:35:30.464+00:00", winter_solstice: "1918-12-22 15:41:31.516+00:00" } }, "1919": { year: "1919", data: { autumn_equinox: "1919-09-24 02:35:23.006+00:00", awakening_of_insects: "1919-03-06 15:05:32.207+00:00", cold_dew: "1919-10-09 08:33:23.293+00:00", end_of_heat: "1919-08-24 05:28:21.307+00:00", frost: "1919-10-24 11:21:18.776+00:00", grain_buds: "1919-05-22 03:39:08.672+00:00", grain_in_ear: "1919-06-06 18:56:41.375+00:00", grain_rain: "1919-04-21 03:58:39.501+00:00", major_cold: "1919-01-21 02:20:44.342+00:00", major_heat: "1919-07-23 22:44:31.449+00:00", major_snow: "1919-12-08 03:37:51.920+00:00", minor_cold: "1919-01-06 08:51:32.216+00:00", minor_heat: "1919-07-08 05:20:35.556+00:00", minor_snow: "1919-11-23 08:25:12.998+00:00", pure_brightness: "1919-04-05 20:28:46.105+00:00", spring_equinox: "1919-03-21 16:19:09.048+00:00", spring_showers: "1919-02-19 16:47:28.962+00:00", start_of_autumn: "1919-08-08 14:58:04.938+00:00", start_of_spring: "1919-02-04 20:39:26.945+00:00", start_of_summer: "1919-05-06 14:22:04.157+00:00", start_of_winter: "1919-11-08 11:11:34.590+00:00", summer_solstice: "1919-06-22 11:53:35.809+00:00",