0

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

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

这相当于 2012 年 12 月 1 日。

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

4

1 回答 1

0

如果您从另一个网站以字符串形式获取数据,那么您需要知道该网站为您提供日期的格式。没有办法解决这个问题,因为 DMY 和 MDY 无法区分。如果年份使用两位数格式,即使 YMD 也无法区分。

这根本没有经过测试,但在最坏的情况下,一般的想法应该可以解决你的问题。

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 表示月份。

于 2012-12-24T16:34:59.107 回答