2012-08-03 34 views
-1

我的一个朋友有一个采访,这是被问的问题,设计模式接受日期

Web应用程序应该接受任何图案日期,

即它可能MM-DD-YY/dd-mm-yyyy/dd-mm-yy,Jan-dd-yyyy ..你可以想到的任何日期模式..

他需要一个函数,一旦用户输入,就会逐个验证字符。

我们该如何处理?

+0

是否指定了语言? – Bergi 2012-08-03 19:32:25

+0

如果没有用户输入06-07-12,您无法准确区分mm-dd-yy和dd-mm-yy的时间百分之百。是6月7日还是7月6日? – Nate 2012-08-03 19:36:05

回答

1

也许我是误解,但如果问题是关于验证那么它不是解码日期,而只是确保日期无效。也就是说不让你输入29-02-2011,或02-29-11等等。

我会做的是编写一个函数,首先将日期分成几部分。鉴于这个问题,我们可以说日期将采用数字形式,因此需要使用分隔符。我们使用(。 - /)作为可能的分隔符。使用分隔符将日期分成三部分,以便在内存中有三个不同的数字值。

现在的逻辑。第一个值可以是任何东西(d,m,y)。第二个值永远不会是一年,所以它只能是(d,m)。第三个值永远不会是一个月,所以它只能是(d,y)。记住我会做的事情沿线︰

  1. 试着找到一年,因为它没有范围。任何值x其中x> 31必须是年份。

  2. 试着找到一天。任何不是一年的价值都是一天。

  3. 一旦你有这些值做一个快速检查,以确保月< = 12.如果不是,那么日期是无效的。

......但是歧义......呢?

在含糊不清的情况下,如01-01-01,您将不得不使用上面描述的逻辑,每个值可能是。考虑到每个日期段的价值,您需要编写一个函数来测试每种可能性。我想如果你想验证一个日期,那么如果它至少通过了一次测试,那么你就会把日期标记为有效。基本上,你只会写一个函数来说明给定年份的给定月份(不要忘记闰年),每天可以进入哪个范围,然后在给定日期循环遍历每个可能的情况。

如果问题是实际解密日期,那么正如已经解释的那样,不可能在不施加格式限制的情况下100%准确地完成该操作。您唯一的选择是在字段值被更改时将JS事件挂接,并且字段更新旁边的文本以长格式显示(2012年1月1日)软件认为用户输入的日期。您如果你愿意,甚至可以让该日期点击以允许用户循环使用不同的格式。但最终,如果这就是你所要求的,那么你将不会获得实现你想要做的事情的具体方式。