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

时间:2012-12-24 15:20:42

标签: javascript

使用字符串编写新的日期对象时,可以将其写为:

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

这相当于2012年12月1日。

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

1 个答案:

答案 0 :(得分:0)

如果您从其他网站获取数据为字符串,则需要知道该网站为您提供日期的格式。没有办法解决这个问题,因为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]);
...

模式:此模式支持日期的任何数字表示,假设它在每个单元之间具有中断字符。如果您需要支持一个没有破坏字符的网站,您需要一个与该网站的确切格式匹配的不同模式(即:网站发送DDMMYYYY,然后模式为/^(\d{2})(\d{2})(\d{4})$/)。

还修改了日期创建中的月份参数,因为我记得JavaScript使用0-11几个月。