接受日期的设计模式

时间:2012-08-03 19:28:29

标签: design-patterns date-format

我的一位朋友接受了采访,这就是被问到的问题,

Web应用程序应接受任何模式的日期,

即它可以mm-dd-yy / dd-mm-yyyy / dd-mm-yy,Jan-dd-yyyy ..您可以想到的任何日期模式..

他需要一个功能,一旦用户输入就会逐个字符地验证。

我们如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

现在是逻辑。第一个值可以是任何值(d,m,y)。第二个值永远不会是一年,所以它只能是(d,m)。第三个值永远不会是一个月,所以它只能是(d,y)。牢记这一点,我会做一些事情:

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

  2. 尝试找一天。任何不是年份的值并且是> 12必须是一天。

  3. 一旦有了这些值,请快速检查以确保月份< = 12.如果不是,则日期无效。

  4. ......但是模糊不清......?

    如果出现歧义,例如01-01-01,你必须弄清楚上面描述的每个值可以的逻辑。考虑到每个日期段的值,您需要编写一个函数来测试每种可能性。我想如果你试图验证一个日期,如果它通过至少一个测试,你会将日期标记为有效。基本上你只需要编写一个函数来说明给定年份中的给定月份(不要忘记闰年),这一天可以在什么范围内进行,然后在给定日期内遍历每个可能的情况。

    如果问题是要实际解读日期,那么正如已经解释的那样,如果不强加格式限制,就不可能100%准确地解释日期。您唯一的另一个选择是在更改字段值时挂钩JS事件,并在字段旁边显示更新以便以长格式显示(2012年1月1日)软件认为用户输入的日期。您如果您愿意,甚至可以使该日期可点击以允许用户循环使用不同的格式。最后,如果这就是你所要求的,那么你将不会得到一个实现你想做的具体方法。