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

FSCalendar的didSelect方法选中日期后显示错误日期的问题求助

解决FSCalendar didSelect回调返回日期与选中日期不符的问题

你碰到的这个问题挺常见的——选中2019年11月9日,回调却返回2019-11-30 18:30:00 +0000,我来帮你拆解可能的原因和解决办法:

1. 先排查时区匹配问题

你看到的输出是UTC时区的日期,FSCalendar默认可能会用UTC时间返回回调日期,但我们实际需要的是本地时区的日期。可以先给你的日历实例配置本地时区和区域:

// 在初始化FSCalendar的代码里添加这两行
yourCalendar.locale = Locale.current
yourCalendar.timeZone = TimeZone.current

同时,打印或处理日期时,用本地时区的DateFormatter来格式化,避免UTC和本地时区的转换混淆:

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { 
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    formatter.timeZone = TimeZone.current // 强制使用本地时区
    let formattedDate = formatter.string(from: date)
    print("selected date \(formattedDate)") 
    setCalendarDate(pDate: date) 
}

2. 检查setCalendarDate方法的逻辑

你在回调里调用了setCalendarDate(pDate: date),有可能是这个方法内部对日期做了错误处理——比如误加了天数、月份,或者时区转换出了问题。可以先暂时注释掉这个方法调用,单独打印日期,看看是否正常。如果注释后日期显示正确,那问题就出在这个方法里,需要排查它的日期运算逻辑。

3. 确认FSCalendar版本兼容性

如果上面的方法都没解决问题,建议检查你使用的FSCalendar版本是否存在已知的日期bug。可以尝试升级到最新稳定版,或者看看官方维护的issue里有没有类似问题的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:31:21