1. /**
    2. * 根据生日计算出生肖、星座、年龄
    3. */
    4. export default {
    5. Calculator: {
    6. /***************************************************************************
    7. * 计算生肖
    8. * 支持简写生日,比如01,转换为2001,89转换为1989; 支持任何可以进行时间转换的格式,比如'1989/01/01','1989 01'等
    9. */
    10. getAnimal:function (birth) {
    11. birth += '';
    12. var len = birth.length;
    13. if (len < 4 && len !== 2) {
    14. return "";
    15. }
    16. if (len === 2) {
    17. birth - 0 > 30 ? birth = '19' + birth : birth = '20' + birth;
    18. }
    19. var year = (new Date(birth)).getFullYear();
    20. var arr = ['猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊'];
    21. return /^\d{4}$/.test(year) ? arr[year % 12] : "";
    22. },
    23. /***************************************************************************
    24. * 计算星座
    25. */
    26. getAstro:function (str) {
    27. str = str.split('-');
    28. let y = str[0],
    29. m = str[1],
    30. d = str[2];
    31. let constellations = [{
    32. 'Start' : 121,
    33. 'End' : 220,
    34. 'Name' : "水平座"
    35. }, {
    36. 'Start' : 221,
    37. 'End' : 320,
    38. 'Name' : "双鱼座"
    39. }, {
    40. 'Start' : 321,
    41. "End" : 420,
    42. "Name" : "白羊座"
    43. }, {
    44. "Start" : 421,
    45. "End" : 520,
    46. "Name" : "金牛座"
    47. }, {
    48. "Start" : 521,
    49. "End" : 620,
    50. "Name" : "双子座"
    51. }, {
    52. "Start" : 621,
    53. "End" : 720,
    54. "Name" : "巨蟹座"
    55. }, {
    56. "Start" : 721,
    57. "End" : 820,
    58. "Name" : "狮子座"
    59. }, {
    60. "Start" : 821,
    61. "End" : 920,
    62. "Name" : "处女座"
    63. }, {
    64. "Start" : 921,
    65. "End" : 1020,
    66. "Name" : "天秤座"
    67. }, {
    68. "Start" : 1021,
    69. "End" : 1120,
    70. "Name" : "天蝎座"
    71. }, {
    72. "Start" : 1121,
    73. "End" : 1220,
    74. "Name" : "射手座"
    75. }];
    76. /*
    77. * 判断日期有效性 1,3,5,7,8,10,12为31天 2月润年29,非润年28 4,6,9,11为30天
    78. */
    79. var daysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    80. // 检测年份
    81. if (y < 1970 || y > 2099) {
    82. return "";
    83. }
    84. // 检测月份
    85. if (m < 1 || m > 12) {
    86. return "";
    87. }
    88. // 检测日期
    89. var mDays = daysInMonth[m - 1];
    90. // 如果是二月,要根据年份计算天数,不是二月时略过此计算
    91. if (m === 2) {
    92. mDays = GetSpecialDays(y);
    93. }
    94. // 判断日数据是不是在月份的有效天范围
    95. if (d < 0 || d > mDays) {
    96. return "";
    97. }
    98. // 星座座标等于m*100 + d
    99. var pos = parseInt(m * 100) + parseInt(d);
    100. for (var i in constellations) {
    101. if (pos >= constellations[i].Start && pos <= constellations[i].End) {
    102. return constellations[i].Name;
    103. }
    104. }
    105. },
    106. // 根据年份计算二月天数
    107. GetSpecialDays:function (y) {
    108. if (y % 400 === 0 || (y % 4 === 0 && y % 100 !== 0)) {
    109. return 29;
    110. }
    111. return 28;
    112. },
    113. /***************************************************************************
    114. * 计算年龄
    115. * 支持传递["yyyy-MM-dd"]等格式的字符串
    116. */
    117. getAge:function (str) {
    118. str = str.split(' ');
    119. str = str[0];
    120. var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    121. if (r === null) {
    122. return false;
    123. }
    124. var d = new Date(r[1], r[3] - 1, r[4]);
    125. if (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3]
    126. && d.getDate() == r[4]) {
    127. var Y = new Date().getFullYear();
    128. return (Y - r[1]);
    129. }
    130. return "";
    131. }
    132. }
    133. };