验证JavaScript中是否存在日期(假设格式正确)
Validate existence of a date in JavaScript (assuming proper formatting)
我正在构建一个JavaScript和HTML小部件,它将驻留在外部网页上(通过复制/粘贴片段)并反馈到rails应用程序中。我注意到JavaScript函数Date.parse("09/31/2014")
返回一个数字,就好像它是一个真实的日期(今年9月只有30天),但当这样的日期到达后端时,rails会拒绝它(这可以通过在IRB中运行"09/31/2014".to_date
来证明)。
我正在寻找一种不依赖外部库的解决方案,因为作为一个嵌入式小部件,我不想将大量的外部资源加载到宿主页面中。
当您使用示例中的输入运行Date.parse时,javascript会注意到您在9月份的天数太多,并溢出到10月份。返回的数字是2014年10月1日的时间戳。如果将数字传递给Date构造函数以创建一个新的Date对象,则可以看出这一点。
var date = new Date(Date.parse("09/31/2014"));
console.log(date.toLocaleDateString()); // "10/1/2014"
如果溢出是可以接受的,那么像这样重新解析时间戳将允许您编写一个函数,将字符串中的日期更正为有效日期。如果这种溢出是不可接受的,并且您只需要验证用户输入,并让他们更正它,那么您就可以很容易地根据重新解析的日期对象的值检查用户字符串的每个组件。
function validateDateString(inputString) {
var day, month, year,
valid = false,
dateRegex = /(['d]{1,2})'/(['d]{1,2})'/((?:['d]{2}){1,2})/,
searched = dateRegex.exec(inputString),
dateObj = new Date(Date.parse(inputString));
if (searched) {
// If we're here, the date regex found a match
// Assume date is valid until checks prove otherwise
valid = true;
month = parseInt(searched[1], 10);
day = parseInt(searched[2], 10);
year = parseInt(searched[3], 10);
// Date object months are zero indexed
if (month !== (dateObj.getMonth() + 1)) {
valid = false;
} else if (day !== dateObj.getDate()) {
valid = false;
} else if (year !== dateObj.getFullYear()) {
valid = false;
}
}
return valid;
}
对于您提供的无效日期输入,上述函数将返回false(我假设日期字符串的格式始终一致),但对于相同格式的有效日期字符串,函数将返回true。
相关文章:
- 如何使用javascript或html下载PDF格式的填写表单
- 货币代码为欧元-金额的格式不应包含小数
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 更改angularjs中的日期-时间格式
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- 我能得到正确的格式吗
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 将日期和时间转换为UTC格式的日期-Javascript
- Javascript格式UTC日期
- 元素的内容必须由格式正确的字符数据或标记组成
- Datetime格式为Friendly Time.Moment JS输出错误
- 将客户端特定的日期格式返回到服务器MVC4
- 将数字四舍五入到小数点后两位,以设置货币格式
- javascript/jquery将utc转换为短格式的本地时间
- JavaScript生成html格式的密码
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 验证JavaScript中是否存在日期(假设格式正确)