直接用比较运算符对比日期字符串结果不可靠,因JavaScript按字典序而非时间序比较;必须先统一转为Date对象(推荐ISO格式解析或手动拆解构造),再用getTime()或直接比较。

直接用比较运算符(如 >、<、===)对比两个不同格式的日期字符串,结果不可靠 —— 因为 JavaScript 会按字符串字典序比较,不是按真实时间顺序。
先统一转成 Date 对象再比较
最稳妥的方式是把两个字符串都解析为 Date 实例,再用 getTime() 或直接比较(Date 对象支持 >/<)。
- 推荐用
new Date(str)转换,但注意:只有符合 ISO 8601 格式(如"2024-05-20"或"2024-05-20T10:30:00")才能被所有浏览器稳定解析 - 像
"20/05/2024"或"05-20-2024"这类格式在不同浏览器中行为不一致(尤其 Safari 和旧版 IE),不能直接传给Date - 建议手动拆解字符串再构造
Date,例如:"20/05/2024"→ 按/分割 →new Date(year, month - 1, day)(注意月份从 0 开始)
避免字符串直接比对的陷阱
比如 "10/01/2024" > "09/15/2024" 返回 false —— 因为字符 "1" < "0"(实际比较的是首字符),完全偏离时间逻辑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 即使两个字符串格式相同(如都是
"MM/DD/YYYY"),也不能依赖>,除非确保它们是固定宽度且零填充(如"09/15/2024"vs"10/01/2024"),但这仍脆弱、难维护 - ISO 格式(
"YYYY-MM-DD")是唯一可安全字符串比较的例外,因为字典序与时间序一致,但仅限纯日期;含时间时需确保时区统一
封装一个安全的比较函数
写个工具函数,自动处理常见格式并返回标准比较结果:
立即学习“Java免费学习笔记(深入)”;
- 识别
"YYYY-MM-DD"、"DD/MM/YYYY"、"MM/DD/YYYY"等常见模式,用正则提取年月日 - 根据分隔符和数字位置推断格式(例如斜杠前两位是日还是月,需结合上下文或约定)
- 统一转为
new Date(year, month - 1, day),然后用date1.getTime() > date2.getTime()判断 - 返回
-1/0/1(类似Array.prototype.sort的比较器),便于复用
时区问题必须显式处理
new Date("2024-05-20") 在不同时区下可能对应不同 UTC 时间,影响跨时区业务逻辑。
- 若数据来自用户输入且无时区信息,按本地时区解析是合理默认
- 若需统一按 UTC 比较,用
new Date("2024-05-20T00:00:00Z")或手动计算偏移 - 警惕
"2024-05-20"解析为 UTC 零点(带Z) vs 本地零点(不带)的区别

















