You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

159 lines
4.0 KiB

  1. import dayjs from 'dayjs';
  2. var days_ZH = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
  3. var days_CN = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
  4. export const datetimeStr = (date) =>{
  5. return dateFormat(date,"DD/MM/YYYY HH:mm:ss")
  6. };
  7. export const dateStr = (date) =>{
  8. return dateFormat(date,"DD/MM/YYYY")
  9. };
  10. export const dateValue = (date) =>{
  11. return dateFormat(date,"YYYY-MM-DD")
  12. };
  13. export const dateStr_Year = (date) =>{
  14. return dateFormat(date,'YYYY')
  15. };
  16. export const datetimeStr_Cht = (date) =>{
  17. return dateFormat(date,"YYYY年MM月DD日 HH:mm:ss")
  18. };
  19. export const dateStr_Cht = (date) =>{
  20. return dateFormat(date,"YYYY年MM月DD日")
  21. };
  22. export const dateStr_Eng = (date) =>{
  23. return dateFormat(date,"DD MMM YYYY")
  24. };
  25. export const datetimeFieldFormat = (date) =>{
  26. return dateFormat(date,"YYYY-MM-DDTHH:mm");
  27. };
  28. export const timeFormat = (date, locale) => {
  29. if (!date) return "";
  30. let d;
  31. // 支援 LocalDateTime array
  32. if (Array.isArray(date)) {
  33. const [y, m, d1, h = 0, min = 0, s = 0] = date;
  34. d = dayjs(new Date(y, m - 1, d1, h, min, s));
  35. } else {
  36. d = dayjs(date);
  37. }
  38. if (!d.isValid()) return "";
  39. const hour = d.hour();
  40. const minute = d.minute();
  41. if (locale === "en") {
  42. return d.format("h:mm a"); // 12:00 pm
  43. }
  44. const period = hour < 12 ? "上午" : "下午";
  45. const h12 = hour % 12 === 0 ? 12 : hour % 12;
  46. if (minute === 0) {
  47. return `${period}${h12}時`;
  48. }
  49. return `${period}${h12}時${minute}分`;
  50. };
  51. export const convertToDate = (date)=>{
  52. if(typeof date == 'number'){
  53. return dayjs(date).toDate();
  54. }else if(Array.isArray(date)){
  55. // if(date.length==3){
  56. // return new Date(date[0],date[1]-1,date[2],0,0,0);
  57. // }else if(date.length==4){
  58. // return new Date(date[0],date[1]-1,date[2],0,0,0);
  59. // }
  60. return new Date(date[0]
  61. ,date[1]-1
  62. ,date[2]
  63. ,date.length>=4?date[3]:0
  64. ,date.length>=5?date[4]:0
  65. ,date.length>=6?date[5]:0);
  66. }else if(typeof date == "string"){
  67. return new Date(date);
  68. }
  69. return date;
  70. }
  71. export const toDate = (date) => {
  72. if (date === null || date === undefined || date === '') return new Date(NaN);
  73. if (typeof date === 'number') {
  74. // support seconds or millis
  75. const ms = date < 1e12 ? date * 1000 : date;
  76. return new Date(ms);
  77. }
  78. if (Array.isArray(date)) {
  79. const [y, m, d, hh = 0, mm = 0, ss = 0] = date;
  80. return new Date(y, m - 1, d, hh, mm, ss);
  81. }
  82. if (typeof date === 'string') {
  83. const normalized = date.includes(' ') && !date.includes('T') ? date.replace(' ', 'T') : date;
  84. const d = new Date(normalized);
  85. return isNaN(d.getTime()) ? new Date(NaN) : d;
  86. }
  87. return date instanceof Date ? date : new Date(NaN);
  88. };
  89. export const formatDateForLocale = (date, intl, locale) => {
  90. const fmt = intl.formatMessage({ id: "paymentMethodDatetimeStrFormat" });
  91. let s = dateFormat(date, fmt) || "";
  92. return locale === "en"
  93. ? s.replace("am", "a.m.").replace("pm", "p.m.")
  94. : s.replace("am", "上午").replace("pm", "下午").replace("00分", "");
  95. };
  96. export const is18_00 = (date) => {
  97. const d = convertToDate(date);
  98. if (!d) return false;
  99. return d.getHours() === 18 && d.getMinutes() === 0;
  100. };
  101. export const dateFormat = (date, format) =>{
  102. date = convertToDate(date);
  103. if(date) return dayjs(date).format(format);
  104. return "";
  105. };
  106. export const dateFormatWithFix = (date, format, hours, minutes) =>{
  107. date = convertToDate(date);
  108. date.setHours(hours);
  109. date.setMinutes(minutes);
  110. if(date) return dayjs(date).format(format);
  111. return "";
  112. };
  113. export const getWeekdayStr_ZH = (date) =>{
  114. date = convertToDate(date);
  115. if(date) return days_ZH[date.getDay()]
  116. return "";
  117. };
  118. export const getWeekdayStr_CN = (date) =>{
  119. date = convertToDate(date);
  120. if(date) return days_CN[date.getDay()]
  121. return "";
  122. };