javascript - 有没有办法防止 JS 中的 Date 对象溢出天/月?
问题描述
我有一个程序,它以 dd.mm.yyyy 格式从用户输入中获取日期。
但是,当输入错误的日期时,例如 30.02.2020,天数溢出并将月份设置为 3。我宁愿能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?
解决方案
没有任何方法可以让Date
对象做到这一点,不。您必须在Date
对象之外处理它。
一种相当简单的方法是在构造后检查字段:
const parts = /^(\d+)\.(\d+)\.(\d+)$/;
if (parts) {
const day = +parts[1];
const month = +parts[2] - 1;
const year = +parts[3];
const dt = new Date(year, month, day);
if (dt.getFullYear() !== year || dt.getMonth() !== month || dt.g etDate() !== day) {
// overflow
}
}
或者在具有命名捕获组的最新环境中:
const parts = /^(?<day>\d+)\.(?<month>\d+)\.(?<year>\d+)$/;
if (parts) {
const day = +parts.groups.day;
const month = +parts.groups.month - 1;
const year = +parts.groups.year;
const dt = new Date(year, month, day);
if (dt.getFullYear() !== year || dt.getMonth() !== month || dt.g etDate() !== day) {
// overflow
}
}
推荐阅读
- python-2.7 - 无法使用 Apriori 算法生成规则列表
- c++ - 在接受输入时运行后台循环 (C++)
- machine-learning - 当动作不影响强化学习中的状态时,它叫什么?
- typescript - 为什么类型谓词的类型必须可以分配给它的参数类型?
- python-3.x - 从 .xlsx 创建文件夹结构
- javascript - 对象数组到带有修改的对象
- html - DOM contenteditable 选择父节点
- vba - 使用vba从ms访问表单文本框中的多个excel文件中检索特定的单元格值
- css - 在 Datatables 中的列中删除或添加类只会更改第一页
- javascript - Vue2 Collapse - 活动时将类添加到 v-collapse-wrapper