You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按日期对Firebase实时数据库的JSON数据排序?

解决Firebase Realtime Database中艺术品数据的日期格式化与排序问题

步骤1:将Firebase返回的对象转换为数组

Firebase Realtime Database返回的是键值对结构的对象,无法直接用array.sort,得先转成数组。如果需要保留艺术品ID,用Object.entries();只需要数据部分的话用Object.values():

// 假设从Firebase获取的数据存在artworks对象中
const artworksArray = Object.entries(artworks).map(([id, data]) => ({
  id,
  ...data
}));

步骤2:解析日期为可排序的Date对象

你的日期格式是"12-12-1212",先明确是日-月-年还是月-日-年,再转成Date对象才能正确排序:

// 处理"DD-MM-YYYY"格式的日期
function parseDate(dateStr) {
  const [day, month, year] = dateStr.split('-');
  // 注意JS中月份从0开始,要减1
  return new Date(year, month - 1, day);
}

// 如果是"MM-DD-YYYY"格式,调整拆分顺序
// const [month, day, year] = dateStr.split('-');

步骤3:按日期排序数组

现在可以用sort方法实现排序,按需选择正序或倒序:

// 按日期从新到旧排序(最新作品在前)
artworksArray.sort((a, b) => {
  const dateA = parseDate(a.artworkCompletionDate);
  const dateB = parseDate(b.artworkCompletionDate);
  return dateB - dateA;
});

// 按日期从旧到新排序(最早作品在前)
// artworksArray.sort((a, b) => parseDate(a.artworkCompletionDate) - parseDate(b.artworkCompletionDate));

步骤4:格式化日期用于页面展示

如果需要把原始日期转成更友好的显示格式,用Intl.DateTimeFormat实现:

// 转成中文日期格式,比如"2023年10月5日"
function formatDate(date) {
  return new Intl.DateTimeFormat('zh-CN', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  }).format(date);
}

// 给每个作品添加格式化后的日期字段
artworksArray.forEach(artwork => {
  artwork.formattedDate = formatDate(parseDate(artwork.artworkCompletionDate));
});

完整示例代码

// 模拟Firebase返回的数据
const artworks = {
  artwork_1: {
    artworkCompletionDate: "05-10-2023",
    artworkDescription: { shortDesc: "风景油画", longDesc: "描绘秋日山林" },
    artworkName: "秋山"
  },
  artwork_2: {
    artworkCompletionDate: "12-08-2022",
    artworkDescription: { shortDesc: "人物速写", longDesc: "街头行人肖像" },
    artworkName: "路人"
  }
};

// 转换为带ID的数组
const artworksArray = Object.entries(artworks).map(([id, data]) => ({ id, ...data }));

// 解析日期函数
function parseDate(dateStr) {
  const [day, month, year] = dateStr.split('-');
  return new Date(year, month - 1, day);
}

// 格式化日期函数
function formatDate(date) {
  return new Intl.DateTimeFormat('zh-CN', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  }).format(date);
}

// 排序并格式化
const sortedArtworks = artworksArray
  .sort((a, b) => parseDate(b.artworkCompletionDate) - parseDate(a.artworkCompletionDate))
  .map(artwork => ({
    ...artwork,
    formattedDate: formatDate(parseDate(artwork.artworkCompletionDate))
  }));

console.log(sortedArtworks);

内容的提问来源于stack exchange,提问作者Austin Harrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:23:03