如何在jQuery Datepicker中将服务器日期设为当前显示日期?
解决jQuery Datepicker显示服务器日期而非客户端日期的问题
我来帮你搞定这个问题!你遇到的核心问题是日期格式解析不匹配——jQuery UI Datepicker默认对字符串日期的解析逻辑和你传入的dd/mm/yyyy格式不兼容,导致你设置的服务器日期被识别为无效,最终 fallback 到了客户端的当前日期。
问题原因
当你直接给setDate或defaultDate传入"26/03/2018"这样的字符串时,Datepicker内部会用JavaScript原生的Date构造函数去解析它。但原生Date对非标准格式(比如dd/mm/yyyy)的解析行为不一致,大部分浏览器会把26/03/2018当成无效日期(因为26不可能是月份),所以就自动用客户端的当前日期了。
解决方案:用Date对象或指定格式解析日期
有两种可靠的方法可以解决这个问题:
方法1:手动创建Date对象
直接构造一个符合JavaScript标准的Date实例(注意月份是从0开始计数的,3月对应2),再传给setDate:
$(function () { $('.temp').datepicker({ showWeek: true, dateFormat: "dd/mm/yy", changeMonth: true, changeYear: true }); // 构造服务器日期的Date对象:年, 月(0-based), 日 const serverDate = new Date(2018, 2, 26); $(".temp").datepicker("setDate", serverDate); });
方法2:用Datepicker的parseDate方法解析
利用$.datepicker.parseDate方法,按照你设置的dateFormat来解析字符串,确保解析结果正确:
$(function () { $('.temp').datepicker({ showWeek: true, dateFormat: "dd/mm/yy", changeMonth: true, changeYear: true }); // 用指定格式解析服务器日期字符串 const serverDateStr = "26/03/2018"; const serverDate = $.datepicker.parseDate("dd/mm/yy", serverDateStr); $(".temp").datepicker("setDate", serverDate); });
额外提示
如果你的服务器日期是从后端动态获取的,建议让后端返回ISO格式的日期字符串(比如"2018-03-26")或者直接返回年、月、日的数值,这样解析起来更稳定,不容易踩格式的坑。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

