如何将JSON文件中的时间戳转换为YYYY-mm-dd格式的本地日期时间
问题原因
当前代码仅将JSON中读取到的时间戳转换为了原生Date对象,没有完成YYYY-mm-dd格式的字符串转换,直接返回给前端渲染时就无法展示人类可读的指定格式日期。
修复方案
在现有代码基础上新增日期格式化方法,处理Date对象输出指定格式的字符串即可,修改后的完整代码如下:
const fs = require('fs'); const util = require('util'); const readFile = util.promisify(fs.readFile); const writeFile = util.promisify(fs.writeFile); /** * 项目数据读写逻辑 */ class ProjectService { /** * 构造函数 * @param {*} datafile 存储项目数据的JSON文件路径 */ constructor(datafile) { this.datafile = datafile; } /** * 日期格式化方法,输出YYYY-mm-dd格式 * @param {Date} date 待格式化的日期对象 * @returns {string} 格式化后的日期字符串 */ #formatDate(date) { const year = date.getFullYear(); // 月份从0开始计数,需要补1,不足两位自动补0 const month = String(date.getMonth() + 1).padStart(2, '0'); // 日期不足两位自动补0 const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } /** * 向JSON文件新增数据 */ async addEntry(name, description) { const data = (await this.getData()) || []; const createdDate = Date.now(); const lastUpdated = Date.now(); // 原逻辑id固定为0会导致所有条目id重复,已修改为按现有最大id累加生成 const maxId = data.length ? Math.max(...data.map(item => item.id)) : 0; const id = maxId + 1; data.unshift({ id, name, description, createdDate, lastUpdated }); return writeFile(this.datafile, JSON.stringify(data)); } async getList() { const data = await this.getData(); for (let i in data) { const createdDate = new Date(data[i]['createdDate']); const lastUpdated = new Date(data[i]['lastUpdated']); // 格式化后再赋值返回 data[i]['createdDate'] = this.#formatDate(createdDate); data[i]['lastUpdated'] = this.#formatDate(lastUpdated); } return data; } /** * 从JSON文件读取数据 */ async getData() { const data = await readFile(this.datafile, 'utf8'); if (!data) return []; return JSON.parse(data); } }
补充说明
如果不需要修改原有的id生成逻辑,直接删掉addEntry方法中id相关的修改部分即可,不影响日期格式化的功能效果。
内容的提问来源于stack exchange,提问作者confoundr
相关产品推荐
相关产品推荐

