dateUtils.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /*
  2. *计算每个月有几周
  3. */
  4. const weekMethods = (date) => {
  5. let fristDay = date;
  6. let endDay = getCurrentMonthLastDay(fristDay).getDate();
  7. let dayArr = [];
  8. let week = fristDay.getDay();
  9. if (week == 0) {
  10. dayArr = test(endDay, 6, dayArr);
  11. } else if (week == 1) {
  12. dayArr = test(endDay, 5, dayArr);
  13. } else if (week == 2) {
  14. dayArr = test(endDay, 4, dayArr);
  15. } else if (week == 3) {
  16. dayArr = test(endDay, 3, dayArr);
  17. } else if (week == 4) {
  18. dayArr = test(endDay, 2, dayArr);
  19. } else if (week == 5) {
  20. dayArr = test(endDay, 1, dayArr);
  21. } else if (week == 6) {
  22. dayArr = test(endDay, 0, dayArr);
  23. }
  24. return dayArr;
  25. };
  26. const test = (endDay, num, arr) => {
  27. if (num != 6) {
  28. arr.push({
  29. startDay: "01",
  30. endDay: "0" + (1 + num)
  31. })
  32. } else {
  33. arr.push({
  34. startDay: "01",
  35. endDay: "07"
  36. })
  37. }
  38. for (let i = 1 + num + 1; i < endDay + 1; i = i + 7) {
  39. let obj = {};
  40. if (i == endDay) {
  41. obj = {
  42. startDay: i,
  43. endDay: i
  44. };
  45. } else if (i + 6 > endDay) {
  46. obj = {
  47. startDay: i,
  48. endDay: endDay
  49. };
  50. } else {
  51. obj = {
  52. startDay: i > 10 ? i : "0" + i,
  53. endDay: i + 6 > 10 ? i + 6 : "0" + (i + 6)
  54. };
  55. }
  56. arr.push(obj);
  57. }
  58. arr.forEach((item, index) => {
  59. item.text = "第" + (index + 1) + "周(" + item.startDay + "-" + item.endDay + ")"
  60. item.value = index + 1
  61. })
  62. return arr;
  63. };
  64. /**
  65. * 获取当前月的最后一天
  66. * */
  67. const getCurrentMonthLastDay = (date) => {
  68. // let date = new Date();
  69. let currentMonth = date.getMonth();
  70. let nextMonth = ++currentMonth;
  71. let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
  72. let oneDay = 1000 * 60 * 60 * 24;
  73. let lastTime = new Date(nextMonthFirstDay - oneDay);
  74. return lastTime;
  75. };
  76. /**
  77. * 年循环
  78. */
  79. // export const yearLoop = (minDate, maxDate) => {
  80. // let yearArr = [];
  81. // if (!minDate) {
  82. // minDate = new Date().getFullYear() - 5;
  83. // }
  84. // if (!maxDate) {
  85. // maxDate = minDate + 10;
  86. // }
  87. // for (let i = minDate; i < maxDate; i++) {
  88. // yearArr.push({
  89. // text: i + "年",
  90. // value: i,
  91. // children: monthLoop(i),
  92. // });
  93. // }
  94. // return yearArr
  95. // };
  96. /***
  97. * 根据月循环
  98. */
  99. const monthLoop = (year) => {
  100. let month = [];
  101. for (let i = 1; i < 13; i++) {
  102. month.push({
  103. text: i + "月",
  104. value: i >9 ? i : '0' + i
  105. });
  106. }
  107. month.forEach((item, index) => {
  108. let date = new Date(year, index, 1);
  109. item.children = weekMethods(date);
  110. });
  111. return month
  112. };
  113. /** * 格式化时间为:yyyy-MM-dd HH:mm:ss * @param date * @returns {string} */
  114. function jsDateFormatter (date,type) {
  115. var seperator1 = "-";
  116. var seperator2 = ":";
  117. var month = date.getMonth() + 1;
  118. var strDate = date.getDate();
  119. if (month >= 1 && month <= 9) {
  120. month = "0" + month;
  121. }
  122. if (strDate >= 0 && strDate <= 9) {
  123. strDate = "0" + strDate;
  124. }
  125. if(type == 'date'){
  126. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
  127. return currentdate;
  128. }
  129. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + " " + date.getHours() + seperator2 + date.getMinutes()+ seperator2 + date.getSeconds();
  130. return currentdate;
  131. }
  132. function getDiffDay(date_1, date_2) {
  133. // 计算两个日期之间的差值
  134. let totalDays,diffDate
  135. let myDate_1 = Date.parse(date_1)
  136. let myDate_2 = Date.parse(date_2)
  137. // 将两个日期都转换为毫秒格式,然后做差
  138. diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值
  139. totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
  140. // console.log(totalDays)
  141. return totalDays // 相差的天数
  142. }
  143. export const getWeekDays = (start,end) => {
  144. let arr = []
  145. let days = getDiffDay(start,end)
  146. let startDate = new Date(start)
  147. for (let i = 0; i <= days;i++) {
  148. let itemDate = new Date(startDate)
  149. itemDate.setDate(startDate.getDate()+(i));
  150. itemDate = new Date(itemDate)
  151. let weekDayName = getWeekdayName(itemDate.getDay(),itemDate)
  152. arr.push({
  153. day: itemDate.getDate(),
  154. weekday: itemDate.getDay(),
  155. weekdayName: weekDayName,
  156. date: itemDate,
  157. str: `${itemDate.getFullYear()}${itemDate.getMonth()}${itemDate.getDate()}`,
  158. isActive: weekDayName == '今日'
  159. })
  160. }
  161. return arr
  162. }
  163. export const getWeekdayName = (weekday,date) => {
  164. let current = new Date()
  165. let diff = getDiffDay(jsDateFormatter(date,'date'),jsDateFormatter(current,'date'))
  166. if(diff == 0)
  167. return '今日'
  168. switch (weekday) {
  169. case 1: return '一'
  170. case 2: return '二'
  171. case 3: return '三'
  172. case 4: return '四'
  173. case 5: return '五'
  174. case 6: return '六'
  175. case 0: return '日'
  176. default: return '未知'
  177. }
  178. }
  179. export const getCurrentWeekByDate = (date) => {
  180. if(!date) date = (new Date()).toDateString()
  181. let dateObj = new Date(date)
  182. let weekIndex = dateObj.getDay()
  183. if(weekIndex == 0) weekIndex = 7
  184. let leftDayCount = weekIndex - 1;
  185. let rightDayCount = 7 - weekIndex;
  186. let leftDateList = []
  187. let rightDateList = []
  188. for (let i = leftDayCount;i>0;i--){
  189. let newDate = new Date(dateObj.toDateString())
  190. newDate = newDate.setDate(newDate.getDate() - i)
  191. newDate = new Date(newDate)
  192. leftDateList.push(newDate)
  193. }
  194. for (let i = 1;i<= rightDayCount;i++){
  195. let newDate = new Date(dateObj.toDateString())
  196. newDate = newDate.setDate(newDate.getDate() + i)
  197. newDate = new Date(newDate)
  198. rightDateList.push(newDate)
  199. }
  200. return [...leftDateList,dateObj,...rightDateList]
  201. }
  202. export const getDateFormatOfCN = (date) => {
  203. date = new Date(date)
  204. let year = date.getFullYear()
  205. let month = date.getMonth() + 1
  206. let day = date.getDate()
  207. return `${year}年${month}月${day}日`
  208. }
  209. export const dateFormater = (formater, t)=>{
  210. let date = t ? new Date(t) : new Date(),
  211. Y = date.getFullYear() + '',
  212. M = date.getMonth() + 1,
  213. D = date.getDate(),
  214. H = date.getHours(),
  215. m = date.getMinutes(),
  216. s = date.getSeconds();
  217. return formater.replace(/YYYY|yyyy/g,Y)
  218. .replace(/YY|yy/g,Y.substring(2,2))
  219. .replace(/MM/g,(M<10?'0':'') + M)
  220. .replace(/DD/g,(D<10?'0':'') + D)
  221. .replace(/HH|hh/g,(H<10?'0':'') + H)
  222. .replace(/mm/g,(m<10?'0':'') + m)
  223. .replace(/ss/g,(s<10?'0':'') + s)
  224. }