웹 프론트엔드 JS 튜토리얼 JS 양력과 음력 변환

JS 양력과 음력 변환

Mar 20, 2018 am 10:22 AM
javascript 전환하다

/**
 * 公历[1900-1-31,2100-12-31]时间区间内的公历、农历互转
 * @charset UTF-8
 * @Author  Jea杨(JJonline@JJonline.Cn)
 * @Version 1.0.0
 * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
 * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] */var calendar = {    /**
     * 农历1900-2100的润大小信息表
     * @Array Of Property
     * @return Hex     */
    lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909
        0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919
        0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929
        0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939
        0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949
        0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959
        0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969
        0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979
        0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989
        0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999
        0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009
        0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019
        0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029
        0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039
        0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049
        0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059
        0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069
        0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079
        0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089
        0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099
        0x0d520],//2100
    /**
     * 公历每个月份的天数普通表
     * @Array Of Property
     * @return Number     */
    solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],    /**
     * 天干地支之天干速查表
     * @Array Of Property
     * @trans ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
     * @return Cn string     */
    Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],    /**
     * 天干地支之地支速查表
     * @Array Of Property
     * @trans ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
     * @return Cn string     */
    Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"],    /**
     * 生肖速查表
     * @Array Of Property
     * @trans ["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
     * @return Cn string     */
    Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"],    /**
     * 24节气速查表
     * @Array Of Property
     * @trans ["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
     * @return Cn string     */
    solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"],    /**
     * 1900-2100各年的24节气日期速查表
     * @Array Of Property
     * @return 0x string For splice     */
    sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',        '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',        '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',        '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',        'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',        '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',        '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',        '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',        '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',        '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',        '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',        '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',        '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',        '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',        '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',        '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',        '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',        '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',        '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',        '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',        '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',        '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',        '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',        '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',        '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',        '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',        '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',        '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',        '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',        '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',        '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',        '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',        '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',        '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',        '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',        '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',        '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',        '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',        '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',        '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',        '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',        '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',        '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',        '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',        '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',        '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',        '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',        '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',        '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',        '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',        '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',        '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',        '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',        '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',        '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',        '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',        '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',        '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',        '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',        '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',        '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',        '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],    /**
     * 数字转中文速查表
     * @Array Of Property
     * @trans ['日','一','二','三','四','五','六','七','八','九','十']
     * @return Cn string     */
    nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],    /**
     * 日期转农历称呼速查表
     * @Array Of Property
     * @trans ['初','十','廿','卅']
     * @return Cn string     */
    nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],    /**
     * 月份转农历称呼速查表
     * @Array Of Property
     * @trans ['正','二','三','四','五','六','七','八','九','十','冬','腊']
     * @return Cn string     */
    nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"],    /**
     * 中国法定节假日速查表(公历)(清明节属24节气)
     * @Json of Property
     * @trans {"0101" : "元旦节", "0501" : "劳动节", "1001" : "国庆节", "0308" : "妇女节", "0504" : "青年节", "0601" : "儿童节", "0801" : "建军节"}
     * @return Cn string     */
    nStr4: {        "0101": "\u5143\u65e6\u8282", // 公历1月1日
        "0501": "\u52b3\u52a8\u8282", // 公历5月1日
        "1001": "\u56fd\u5e86\u8282", // 公历10月1日
        "0308": "\u5987\u5973\u8282", // 公历3月8日
        "0504": "\u9752\u5e74\u8282", // 公历5月4日
        "0601": "\u513f\u7ae5\u8282", // 公历6月1日
        "0801": "\u5efa\u519b\u8282" // 公历8月1日    },    /**
     * 中国法定节假日速查表(农历)(清明节属24节气)
     * @Json of Property
     * @trans {"0101" : "春节", "0505" : "端午节", "0815" : "中秋节"}
     * @return Cn string     */
    nStr5: {        "0101": "\u6625\u8282", // 农历正月初一
        "0505": "\u7aef\u5348\u8282", // 农历五月初五
        "0815": "\u4e2d\u79cb\u8282" // 农历八月十五    },    /**
     * 休息日速查表
     * @Json of Property
     * @return Json     */
    leave: {        "2018": {            "01": ["01", "06", "07", "13", "14", "20", "21", "27", "28"],            "02": ["03", "04", "10", "15", "16", "17", "18", "19", "20", "21", "25"],            "03": ["03", "04", "10", "11", "17", "18", "24", "25", "31"],            "04": ["05", "06", "07", "14", "15", "21", "22", "29", "30"],            "05": ["01", "05", "06", "12", "13", "19", "20", "26", "27"],            "06": ["02", "03", "09", "10", "16", "17", "18", "23", "24", "30"],            "07": ["01", "07", "08", "14", "15", "21", "22", "28", "29"],            "08": ["04", "05", "11", "12", "18", "19", "25", "26"],            "09": ["01", "02", "08", "09", "15", "16", "22", "23", "24"],            "10": ["01", "02", "03", "04", "05", "06", "07", "13", "14", "20", "21", "27", "28"],            "11": ["03", "04", "10", "11", "17", "18", "24", "25"],            "12": ["01", "02", "08", "09", "15", "16", "22", "23", "29", "30"]
        }
    },    /**
     * 获取农历y年一整年的总天数
     * @param {Number} y - lunar year
     * @return {Number}
     * @eg:var count = calendar.lYearDays(1987) ;//count=384     */
    lYearDays: function (y) {        var i, sum = 348;        for (i = 0x8000; i > 0x8; i >>= 1) {
            sum += (calendar.lunarInfo[y - 1900] & i) ? 1 : 0;
        }        return (sum + calendar.leapDays(y));
    },    /**
     * 获取农历y年闰月是哪个月;若y年没有闰月 则返回0
     * @param {Number} y - lunar year
     * @return {Number} (0-12)
     * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6     */
    leapMonth: function (y) { //闰字编码 \u95f0
        return (calendar.lunarInfo[y - 1900] & 0xf);
    },    /**
     * 获取农历y年闰月的天数;若该年没有闰月则返回0
     * @param {Number} y - lunar year
     * @return {Number} (0、29、30)
     * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29     */
    leapDays: function (y) {        if (calendar.leapMonth(y)) {            return ((calendar.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
        }        return (0);
    },    /**
     * 获取农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
     * @param {Number} y - lunar year
     * @param {Number} m - lunar month
     * @return {Number} (-1、29、30)
     * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29     */
    monthDays: function (y, m) {        if (m > 12 || m < 1) {            return -1
        }//月份参数从1至12,参数错误返回-1
        return ( (calendar.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29 );
    },    /**
     * 获取公历y年m月的天数
     * @param {Number} solar Year
     * @param {Number} solar Month
     * @return Number (-1、28、29、30、31)
     * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30     */
    solarDays: function (y, m) {        if (m > 12 || m < 1) {            return -1
        } //若参数错误 返回-1
        var ms = m - 1;        if (ms == 1) { //2月份的闰平规律测算后确认返回28或29
            return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
        } else {            return (calendar.solarMonth[ms]);
        }
    },    /**
     * 农历年份转换为干支纪年
     * @param {Number} y - lunar year
     * @return {String} Cn string     */
    toGanZhiYear: function (y) {        var ganKey = (y - 3) % 10;        var zhiKey = (y - 3) % 12;        if (ganKey == 0) ganKey = 10;//如果余数为0则为最后一个天干
        if (zhiKey == 0) zhiKey = 12;//如果余数为0则为最后一个地支
        return calendar.Gan[ganKey - 1] + calendar.Zhi[zhiKey - 1];
    },    /**
     * 公历月、日判断所属星座
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {String} Cn string     */
    toAstro: function (m, d) {        var s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";        var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 23, 22];        return s.substr(m * 2 - (d < arr[m - 1] ? 2 : 0), 2) + "\u5ea7";//座    },    /**
     * 传入offset偏移量返回干支
     * @param {Number} offset - 相对甲子的偏移量
     * @return {String} Cn string     */
    toGanZhi: function (offset) {        return calendar.Gan[offset % 10] + calendar.Zhi[offset % 12];
    },    /**
     * 传入公历y年获得该年第n个节气的公历日期
     * @param {Number} y - 公历年(1900-2100)
     * @param {Number} n - 二十四节气中的第几个节气(1~24),从n=1(小寒)算起
     * @return {Number} day
     * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春     */
    getTerm: function (y, n) {        if (y < 1900 || y > 2100) {            return -1;
        }        if (n < 1 || n > 24) {            return -1;
        }        var _table = calendar.sTermInfo[y - 1900];        var _info = [
            parseInt('0x' + _table.substr(0, 5)).toString(),
            parseInt('0x' + _table.substr(5, 5)).toString(),
            parseInt('0x' + _table.substr(10, 5)).toString(),
            parseInt('0x' + _table.substr(15, 5)).toString(),
            parseInt('0x' + _table.substr(20, 5)).toString(),
            parseInt('0x' + _table.substr(25, 5)).toString()
        ];        var _calday = [
            _info[0].substr(0, 1),
            _info[0].substr(1, 2),
            _info[0].substr(3, 1),
            _info[0].substr(4, 2),
            _info[1].substr(0, 1),
            _info[1].substr(1, 2),
            _info[1].substr(3, 1),
            _info[1].substr(4, 2),
            _info[2].substr(0, 1),
            _info[2].substr(1, 2),
            _info[2].substr(3, 1),
            _info[2].substr(4, 2),
            _info[3].substr(0, 1),
            _info[3].substr(1, 2),
            _info[3].substr(3, 1),
            _info[3].substr(4, 2),
            _info[4].substr(0, 1),
            _info[4].substr(1, 2),
            _info[4].substr(3, 1),
            _info[4].substr(4, 2),
            _info[5].substr(0, 1),
            _info[5].substr(1, 2),
            _info[5].substr(3, 1),
            _info[5].substr(4, 2),
        ];        return parseInt(_calday[n - 1]);
    },    /**
     * 传入农历数字月份返回汉语通俗表示法
     * @param {Number} m - lunar month
     * @return {String} Cn string
     * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'     */
    toChinaMonth: function (m) { // 月 => \u6708
        if (m > 12 || m < 1) {            return -1
        } //若参数错误 返回-1
        var s = calendar.nStr3[m - 1];
        s += "\u6708";//加上月字
        return s;
    },    /**
     * 传入农历日期数字返回汉字表示法
     * @param {Number} d - lunar day
     * @return {String} Cn string
     * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth=&#39;廿一&#39;     */
    toChinaDay: function (d) { //日 => \u65e5
        var s;        switch (d) {            case 10:
                s = '\u521d\u5341';                break;            case 20:
                s = '\u4e8c\u5341';                break;                break;            case 30:
                s = '\u4e09\u5341';                break;                break;            default :
                s = calendar.nStr2[Math.floor(d / 10)];
                s += calendar.nStr1[d % 10];
        }        return (s);
    },    /**
     * 公历日期转生肖(分界线是“立春”)
     * @param {Number} y - solar year
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {String} Cn string
     * @eg:var animal = calendar.getAnimal(1987, 2, 4) ;//animal='兔'     */
    getAnimal: function (y, m, d) {        var term = calendar.getTerm(y, 3);//返回当年第三个节气[立春]为公历几日
        if ((m == 2 && d >= term) || m > 2) {            return calendar.Animals[(y - 4) % 12];
        }        return calendar.Animals[(y - 5) % 12];
    },    /**
     * 公历日期是否24节气
     * @param {Number} y - solar year
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {boolean}
     * @eg:var isTerm = calendar.isTerm(1987, 2, 4) ; // isTerm = true     */
    isTerm: function (y, m, d) {        // 当月的两个节气
        var firstNode = calendar.getTerm(y, (m * 2 - 1));//返回当月第一「节气」为几日开始
        var secondNode = calendar.getTerm(y, (m * 2));//返回当月第二「节气」为几日开始
        //传入的日期的节气与否
        var isTerm = false;        if (firstNode == d) {
            isTerm = true;
        }        if (secondNode == d) {
            isTerm = true;
        }        return isTerm;
    },    /**
     * 获取公历日期的24节气值
     * @param {Number} y - solar year
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {String} Cn string
     * @eg:var term = calendar.getShowTerm(1987, 2, 4); // term = '立春'     */
    getShowTerm: function (y, m, d) {        // 当月的两个节气
        var firstNode = calendar.getTerm(y, (m * 2 - 1));//返回当月第一个「节气」为几日开始
        var secondNode = calendar.getTerm(y, (m * 2));//返回当月第二个「节气」为几日开始
        //传入的日期的节气与否
        var term = null;        if (firstNode == d) {
            term = calendar.solarTerm[m * 2 - 2];
        }        if (secondNode == d) {
            term = calendar.solarTerm[m * 2 - 1];
        }        return term;
    },    /**
     * 获取指定公历日期是一年中的第几周
     * @param {Number} y - solar year
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {Number} 第几周     */
    getWeekOfYear: function (y, m, d) {        // 指定日期是一年中的第几天
        var days = d;        for (var i = 1; i < m; i++) {
            days += calendar.solarDays(y, i);
        }        // 指定年份的第一天是星期几
        var yearFirstDay = new Date(y, 0, 1).getDay() || 7;        var week = null;        if (yearFirstDay == 1) {
            week = Math.ceil(days / 7);
        } else {
            days -= (7 - yearFirstDay + 1);
            week = Math.ceil(days / 7) + 1;
        }        return week;
    },    /**
     * 传入公历年月日获得详细的公历、农历 JSON object信息
     * @param {Number} y - solar year
     * @param {Number} m - solar month
     * @param {Number} d - solar day
     * @return {JSON} JSON object
     * @eg:console.log(calendar.solar2lunar(1987,11,01));     */
    solar2lunar: function (y, m, d) { //参数区间公历1900.1.31~2100.12.31
        //年份限定
        if (y < 1900 || y > 2100) {            return -1;
        }        //公历传参最下限
        if (y == 1900 && m == 1 && d < 31) {            return -1;
        }        //未传参;获得当天
        var objDate = null;        if (!y) {
            objDate = new Date();
        } else {
            objDate = new Date(y, parseInt(m) - 1, d)
        }        var i, leap = 0, temp = 0;        //修正ymd参数
        var y = objDate.getFullYear(),
            m = objDate.getMonth() + 1,
            d = objDate.getDate();        var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000;        for (i = 1900; i < 2101 && offset > 0; i++) {
            temp = calendar.lYearDays(i);
            offset -= temp;
        }        if (offset < 0) {
            offset += temp;
            i--;
        }        //是否今天
        var isTodayObj = new Date(),
            isToday = false;        if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
            isToday = true;
        }        //星期几
        var nWeek = objDate.getDay(),
            cWeek = calendar.nStr1[nWeek];        //数字表示周几顺应天朝周一开始的惯例
        if (nWeek == 0) {
            nWeek = 7;
        }        //农历年
        var year = i;        var leap = calendar.leapMonth(i); //闰哪个月
        var isLeap = false;        //效验闰月
        for (i = 1; i < 13 && offset > 0; i++) {            //闰月
            if (leap > 0 && i == (leap + 1) && isLeap == false) {                --i;
                isLeap = true;
                temp = calendar.leapDays(year); //计算农历闰月天数
            } else {
                temp = calendar.monthDays(year, i);//计算农历普通月天数            }            //解除闰月
            if (isLeap == true && i == (leap + 1)) {
                isLeap = false;
            }
            offset -= temp;
        }        // 闰月导致数组下标重叠取反
        if (offset == 0 && leap > 0 && i == leap + 1) {            if (isLeap) {
                isLeap = false;
            } else {
                isLeap = true;                --i;
            }
        }        if (offset < 0) {
            offset += temp;            --i;
        }        //农历月
        var month = i;        //农历日
        var day = offset + 1;        //天干地支处理
        var gzY = calendar.toGanZhiYear(year);        // 当月的第一个节气
        var firstNode = calendar.getTerm(y, (m * 2 - 1));//返回当月第一个「节气」为几日开始
        // 依据12节气修正干支月
        var gzM = calendar.toGanZhi((y - 1900) * 12 + m + 11);        if (d >= firstNode) {
            gzM = calendar.toGanZhi((y - 1900) * 12 + m + 12);
        }        // 指定日期与 1900/1/1 相差天数
        var dayCyclical = Date.UTC(y, m - 1, d, 0, 0, 0, 0) / 86400000 + 25567 + 10;        var gzD = calendar.toGanZhi(dayCyclical);        //该日期所属的星座
        var astro = calendar.toAstro(m, d);        //中国法定节假日
        var vacation = null;        var month_day = (month > 9 ? "" + month : "0" + month) + (day > 9 ? "" + day : "0" + day);        var m_d = (m > 9 ? "" + m : "0" + m) + (d > 9 ? "" + d : "0" + d);        var vacation_temp = calendar.nStr5[month_day] || calendar.nStr4[m_d];        if (vacation_temp) {
            vacation = vacation_temp;
        }        return {            'lYear': year,            'lMonth': month,            'lDay': day,            'Animal': calendar.getAnimal(y, m, d),            'IMonthCn': (isLeap ? "\u95f0" : '') + calendar.toChinaMonth(month),            'IDayCn': calendar.toChinaDay(day),            'cYear': y,            'cMonth': m,            'cDay': d,            'gzYear': gzY,            'gzMonth': gzM,            'gzDay': gzD,            'isToday': isToday,            'isLeap': isLeap,            'nWeek': nWeek,            'ncWeek': "\u661f\u671f" + cWeek,            'weekOfYear': "\u7b2c" + calendar.getWeekOfYear(y, m, d) + "\u5468",            'isTerm': calendar.isTerm(y, m, d),            'Term': calendar.getShowTerm(y, m, d),            'astro': astro,            'vacation': vacation
        };
    },    /**
     * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历 JSON object信息
     * @param {Number} y - lunar year
     * @param {Number} m - lunar month
     * @param {Number} [d] - lunar day
     * @param {Boolean} [isLeapMonth] - lunar month is leap or not,如果是农历闰月赋值true即可.
     * @return {JSON} JSON object
     * @eg:console.log(calendar.lunar2solar(1987,9,10));     */
    lunar2solar: function (y, m, d, isLeapMonth) { //参数区间农历1900.1.1~2100.12.1
        //年份限定
        if (y < 1900 || y > 2100) {            return -1;
        }        //农历传参最上限
        if (y == 2100 && m == 12 && d > 1) {            return -1;
        }        var isLeapMonth = !!isLeapMonth;        var leapMonth = calendar.leapMonth(y);        if (isLeapMonth && (leapMonth != m)) { // 计算得出的闰月与传参的月份不同
            return -1;
        }        var day = calendar.monthDays(y, m);        var _day = day;        if (isLeapMonth) {
            _day = calendar.leapDays(y, m);
        }        if (d > _day) { // 传参的日期大于计算得出的农历当月的天数
            return -1;
        }        //计算传入时间相对于农历1900年正月初一的时间差
        var offset = 0;        for (var i = 1900; i < y; i++) {
            offset += calendar.lYearDays(i);
        }        for (var i = 1; i < m; i++) {            if (i == leapMonth) { //处理闰月
                offset += calendar.leapDays(y);
            }
            offset += calendar.monthDays(y, i);
        }        //如果是闰月,需补充该年闰月的前一个月的时差
        if (isLeapMonth) {
            offset += day;
        }        // 农历1900年正月初一的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
        var stmap = Date.UTC(1900, 0, 30, 0, 0, 0);        var calObj = new Date((offset + d) * 86400000 + stmap);        var cY = calObj.getUTCFullYear();        var cM = calObj.getUTCMonth() + 1;        var cD = calObj.getUTCDate();        return calendar.solar2lunar(cY, cM, cD);
    }
};
로그인 후 복사

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

text-align이 양쪽 끝에서 정렬을 달성하는 방법

MySQL Mac 시스템에서 루트 비밀번호 재설정

위 내용은 JS 양력과 음력 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

전각 영문자를 반각 형태로 변환하는 실용적인 팁 전각 영문자를 반각 형태로 변환하는 실용적인 팁 Mar 26, 2024 am 09:54 AM

전각 영문자를 반각 형태로 변환하는 실용팁 현대생활에서 우리는 영문자를 자주 접하게 되고, 컴퓨터나 휴대폰, 기타 기기를 사용할 때 영문자를 입력해야 하는 경우가 많습니다. 그러나 때로는 영어의 전각 문자를 접하게 되므로 반각 형식을 사용해야 합니다. 그렇다면 전각 영문자를 반각 형태로 변환하는 방법은 무엇일까요? 다음은 몇 가지 실용적인 팁입니다. 먼저, 전각 영문자 및 ​​숫자는 입력방법에서 전각 위치를 차지하는 문자를 말하며, 반각 영문자 및 ​​숫자는 전각 위치를 차지한다.

AI 파일을 CDR 형식으로 변환하는 방법 AI 파일을 CDR 형식으로 변환하는 방법 Feb 19, 2024 pm 04:09 PM

AI 파일은 Adobe Illustrator(줄여서 AI) 소프트웨어로 만든 벡터 그래픽 파일을 의미하고, CDR 파일은 CorelDRAW 소프트웨어로 만든 벡터 그래픽 파일을 의미합니다. 이 두 소프트웨어는 서로 다른 제조업체에서 개발되었기 때문에 파일 형식이 다르며 서로 직접 변환할 수 없습니다. 그러나 몇 가지 방법을 통해 AI 파일을 CDR 파일로 변환할 수 있습니다. 일반적인 변환 방법은 아래에 소개됩니다. 1단계: AI 파일을 EPS 형식으로 내보내기 AdobeIllust

Windows 11/10에서 ODT를 Word로 변환하는 방법은 무엇입니까? Windows 11/10에서 ODT를 Word로 변환하는 방법은 무엇입니까? Feb 20, 2024 pm 12:21 PM

이 기사에서는 OpenDocumentTextDocument(ODT) 파일을 Microsoft Word(Docx, DOC 등)로 변환하는 방법을 보여줍니다. 체재. Windows 11/10에서 ODT를 Word로 변환하는 방법 다음은 Windows PC에서 ODT 문서를 DOC 또는 DOCX 형식으로 변환하는 방법입니다. 워드패드 또는 Word를 사용하여 ODT를 Word로 변환합니다. 우리가 보여줄 첫 번째 방법은 워드패드 또는 ODT를 Word로 변환하는 MicrosoftWord. 이를 달성하는 단계는 다음과 같습니다. 먼저 시작 메뉴를 사용하여 워드패드 앱을 엽니다. 이제 다음으로 이동하세요.

가상 머신을 물리적 머신으로 변환하는 방법은 무엇입니까? 가상 머신을 물리적 머신으로 변환하는 방법은 무엇입니까? Feb 19, 2024 am 11:40 AM

가상 머신(VM)을 물리적 머신으로 변환하는 것은 가상 인스턴스 및 관련 애플리케이션 소프트웨어를 물리적 하드웨어 플랫폼으로 마이그레이션하는 프로세스입니다. 이러한 변환은 운영 체제 성능과 하드웨어 리소스 활용도를 최적화하는 데 도움이 됩니다. 이 문서에서는 이러한 변환을 수행하는 방법을 자세히 살펴보는 것을 목표로 합니다. 가상 머신에서 물리적 머신으로의 마이그레이션을 어떻게 구현하나요? 일반적으로 가상 머신과 물리적 머신 간의 변환 프로세스는 타사 소프트웨어에 의해 가상 머신 외부에서 수행됩니다. 이 프로세스는 가상 머신 구성 및 리소스 전송과 관련된 여러 단계로 구성됩니다. 실제 머신 준비: 첫 번째 단계는 실제 머신이 Windows의 하드웨어 요구 사항을 충족하는지 확인하는 것입니다. 변환 프로세스가 기존 데이터를 덮어쓰게 되므로 실제 머신에 데이터를 백업해야 합니다. *시스템 이미지를 생성할 수 있는 관리자 권한이 있는 관리자 계정의 사용자 이름 및 비밀번호입니다. 가상일 것이다

Golang 시간 처리: Golang에서 타임스탬프를 문자열로 변환하는 방법 Golang 시간 처리: Golang에서 타임스탬프를 문자열로 변환하는 방법 Feb 24, 2024 pm 10:42 PM

Golang 시간 변환: 타임스탬프를 문자열로 변환하는 방법 Golang에서 시간 연산은 매우 일반적인 연산 중 하나입니다. 때로는 쉽게 표시하거나 저장하기 위해 타임스탬프를 문자열로 변환해야 하는 경우도 있습니다. 이 기사에서는 Golang을 사용하여 타임스탬프를 문자열로 변환하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 타임스탬프와 문자열의 변환 Golang에서 타임스탬프는 일반적으로 1970년 1월 1일부터 현재 시간까지의 초 수를 나타내는 정수 형태로 표현됩니다. 문자열은

PHP 월을 영어 월로 변환하는 구현 방법에 대한 자세한 설명 PHP 월을 영어 월로 변환하는 구현 방법에 대한 자세한 설명 Mar 21, 2024 pm 06:45 PM

이 기사에서는 PHP의 월을 영어 월로 변환하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. PHP 개발 시 디지털 월을 영어 월로 변환해야 하는 경우가 있는데, 이는 일부 날짜 처리 또는 데이터 표시 시나리오에서 매우 실용적입니다. 구현 원칙, 구체적인 코드 예시, 주의사항은 아래에서 자세히 설명하겠습니다. 1. 구현 원리 PHP에서는 DateTime 클래스와 형식 메소드를 사용하여 디지털 월을 영어 월로 변환할 수 있습니다. 날짜

qq 음악을 mp3 형식으로 변환하는 방법 휴대폰에서 qq 음악을 mp3 형식으로 변환 qq 음악을 mp3 형식으로 변환하는 방법 휴대폰에서 qq 음악을 mp3 형식으로 변환 Mar 21, 2024 pm 01:21 PM

QQ Music을 사용하면 누구나 영화를 감상하고 지루함을 해소할 수 있습니다. 이 소프트웨어를 사용하면 누구나 쉽게 들을 수 있는 고품질 노래를 다운로드할 수 있습니다. 다음에 들을 때는 인터넷 연결이 필요하지 않습니다. 여기에서 다운로드한 노래는 MP3 형식이 아니며 다른 플랫폼에서 사용할 수 없습니다. 따라서 해당 노래를 다시 들을 수 없습니다. , 많은 친구들이 노래를 MP3 형식으로 변환하고 싶어합니다. 여기서 편집자는 모든 사람이 사용할 수 있도록 방법을 제공한다고 설명합니다. 1. 컴퓨터에서 QQ Music을 열고 오른쪽 상단의 [메인 메뉴] 버튼을 클릭한 후 [오디오 트랜스코딩]을 클릭하고 [노래 추가] 옵션을 선택한 후 변환해야 하는 노래를 추가합니다. 노래를 클릭하여 [mp3]로 변환을 선택하세요.

전각 영문자를 반각 문자로 변환하는 방법 전각 영문자를 반각 문자로 변환하는 방법 Mar 25, 2024 pm 02:45 PM

전각 영문자를 반각자로 변환하는 방법 일상생활이나 직장에서 컴퓨터 비밀번호를 입력하거나 문서를 편집하거나 작업을 할 때 전각 영문자를 반각자로 변환해야 하는 상황에 직면할 때가 있습니다. 레이아웃 디자인. 영문자와 숫자는 한자와 폭이 같은 문자를 의미하고, 영문자는 한자와 폭이 좁은 문자를 의미합니다. 실제 작업에서는 텍스트와 숫자를 보다 편리하게 처리할 수 있도록 영문 전각을 반각 문자로 변환하는 몇 가지 간단한 방법을 익혀야 합니다. 1. 영문자 전각 및 영문자 반각

See all articles