// Vue Mixin - 日期轉換工具 // 用於處理 ASP.NET ASMX Web Service 回傳的日期格式 var DateMixin = { methods: { /** * 格式化日期 * @param {string|Date} dateStr - 日期字串或 Date 物件 * @param {string} separator - 日期分隔符,預設為 "-" * @returns {string} 格式化後的日期字串 */ FormatDate: function(dateStr, separator) { if (!dateStr) return ''; // 預設分隔符為 "-" if (separator === undefined) { separator = '-'; } // 處理 ASP.NET ASMX 的日期格式 /Date(1764622110737)/ if (typeof dateStr === 'string' && dateStr.indexOf('/Date(') === 0) { var timestamp = parseInt(dateStr.match(/-?\d+/)[0]); var date = new Date(timestamp); var year = String(date.getFullYear()).padStart(4, '0'); var month = String(date.getMonth() + 1).padStart(2, '0'); var day = String(date.getDate()).padStart(2, '0'); return year + separator + month + separator + day; } // 如果已經是一般的 Date 物件或其他格式 var date = new Date(dateStr); if (!isNaN(date.getTime())) { var year = String(date.getFullYear()).padStart(4, '0'); var month = String(date.getMonth() + 1).padStart(2, '0'); var day = String(date.getDate()).padStart(2, '0'); return year + separator + month + separator + day; } return dateStr; }, /** * 遍歷物件或陣列,自動轉換所有符合 ASP.NET ASMX 日期格式的屬性 * @param {Object|Array} obj - 要處理的物件或陣列 * @param {string} separator - 日期分隔符,預設為 "-" * @returns {Object|Array} 處理後的物件或陣列 */ ConvertDatesInObject: function(obj, separator) { if (!obj) return obj; // 預設分隔符為 "-" if (separator === undefined) { separator = '-'; } // 處理陣列 if (Array.isArray(obj)) { return obj.map(function(item) { return this.ConvertDatesInObject(item, separator); }.bind(this)); } // 處理物件 if (typeof obj === 'object') { var result = {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { var value = obj[key]; // 檢查是否為 ASP.NET ASMX 日期格式 if (typeof value === 'string' && value.indexOf('/Date(') === 0) { result[key] = this.FormatDate(value, separator); } // 遞迴處理巢狀物件或陣列 else if (value !== null && typeof value === 'object') { result[key] = this.ConvertDatesInObject(value, separator); } else { result[key] = value; } } } return result; } return obj; }, /** * 格式化日期時間 * @param {string|Date} dateStr - 日期字串或 Date 物件 * @param {string} separator - 日期分隔符,預設為 "-" * @returns {string} 格式化後的日期時間字串 */ FormatDateTime: function(dateStr, separator) { if (!dateStr) return ''; // 預設分隔符為 "-" if (separator === undefined) { separator = '-'; } var date; // 處理 ASP.NET ASMX 的日期格式 /Date(1764622110737)/ if (typeof dateStr === 'string' && dateStr.indexOf('/Date(') === 0) { var timestamp = parseInt(dateStr.match(/-?\d+/)[0]); date = new Date(timestamp); } else { date = new Date(dateStr); } if (isNaN(date.getTime())) { return dateStr; } var year = String(date.getFullYear()).padStart(4, '0'); var month = String(date.getMonth() + 1).padStart(2, '0'); var day = String(date.getDate()).padStart(2, '0'); var hours = String(date.getHours()).padStart(2, '0'); var minutes = String(date.getMinutes()).padStart(2, '0'); var seconds = String(date.getSeconds()).padStart(2, '0'); return year + separator + month + separator + day + ' ' + hours + ':' + minutes + ':' + seconds; } } };