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

Table Calendar无法显示每月最后一天的Firebase同步事件求助

问题原因与解决办法

可能原因

  • 日期精度/时区不匹配:Firebase存储的Timestamp包含时分秒信息,而Table Calendar的_selectedDay仅保留年月日,直接比较时因时间部分差异导致匹配失败;或是UTC与本地时区转换时,最后一天的日期被偏移到下月第一天。
  • 日期过滤逻辑错误:_getEventsForTheDay函数中,日期比较未严格匹配年月日,或手动计算月份天数时忽略了闰年(如2月29日)、大月最后一天的边界情况。

可行解决办法

  1. 统一日期比较精度
    在过滤事件时,强制只比较年月日部分,忽略时分秒。修改_getEventsForTheDay函数:

    List<Event> _getEventsForTheDay(DateTime day) {
      // 生成仅含年月日的目标日期
      final targetDate = DateTime(day.year, day.month, day.day);
      return _events.where((event) {
        // 转换事件日期为仅含年月日的格式
        final eventDate = DateTime(event.date.year, event.date.month, event.date.day);
        return eventDate == targetDate;
      }).toList();
    }
    
  2. 修正Firebase日期转换
    从Firebase获取Timestamp时,使用官方方法转换为本地DateTime,避免时区偏移:

    // 从Firebase文档中解析日期
    final eventDate = (firebaseDocData['date'] as Timestamp).toDate();
    
  3. 打印日志验证日期
    在代码中添加日志,确认_selectedDay和事件日期的具体值,排查是否存在偏移:

    print('选中日期: ${_selectedDay}');
    _getEventsForTheDay(_selectedDay).forEach((event) {
      print('事件日期: ${event.date}');
    });
    

内容的提问来源于stack exchange,提问作者Daniel Ginghina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:34:59