从日/月/年的表格中获取正确的日期

Getting the proper date from forms that are day/month/year

本文关键字:日期 获取 表格 从日      更新时间:2023-09-26

当使用字符串编写新的日期对象时,可以这样写:

var someDay = new Date("12/01/2012");

等于2012年12月1日。

但是,如果用户必须在网站上填写日期,而格式不是月/日/年,而是日/月/年,该怎么办?那么如何创建具有正确日期的date对象呢?

如果您从另一个网站获得字符串形式的数据,那么您需要知道该网站为您提供日期的格式。这是没有办法的,因为D-M-Y和M-D-Y是无法区分的;如果年份使用两位数的格式,甚至Y-M-D也无法区分。

这根本没有经过测试,但最坏的情况是,大致的想法应该可以解决您的问题。

var pattern = /^('d+)'b('d+)'b('d+)$/;
if (!pattern.test(dateString))
    return null;
var matches = dateString.match(pattern);
if (siteUsesDMY)
    return new Date(matches[2], matches[1]-1, matches[0]);
if (siteUsesMDY)
    return new Date(matches[2], matches[0]-1, matches[1]);
...

Pattern:该模式支持日期的任何数字表示,假设它在每个单位之间有一个分隔符。如果你需要支持一个没有中断字符的网站,你需要一个与该网站的确切格式相匹配的不同模式(即:站点发送DDMMYYYY,那么模式将是/^('d{2})('d{2})('d{4})$/)。

还修复了日期创建中的month参数,因为我刚刚记得JavaScript使用0-11表示月份。