如何验证 MM/dd/yyyy hh:mm 格式的 DateTime?

4

我正在使用MaskedEditExtender来输入日期时间。但我无法弄清如何对其进行验证。

是否有用于验证日期和时间MM/dd/yyyy hh:mm的正则表达式?

或者有任何Javascript函数吗?


尝试从这里开始:http://www.regular-expressions.info/dates.html该网站解释了如何修改正则表达式以适应您的需求。 - Apoorv
6个回答

5

Javascript中有一个名为Date.parse的函数。

它接受格式为mm/dd/yyyy hh:mm:ss的美国日期格式,在我测试过的所有浏览器中都能正常工作:Firefox、Safari、Chrome和Edge。

console.log(new Date(Date.parse("03/25/2022 12:00")))

将在2011年9月10日中午返回


来自 Mozilla 的建议是:不建议使用 Date.parse,因为在 ES5 之前,字符串解析完全依赖于实现。不同的主机解析日期字符串仍然存在许多差异,因此应手动解析日期字符串(如果需要适应许多不同的格式,则可以使用库进行帮助)。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse - Kelsey Hannan
@KelseyHannan 我建议使用的日期格式在我测试的所有浏览器中都可以正常工作,包括Firefox、Safari、Chrome和Edge。 - mplungjan

5
这将解决您的问题:
^(([0]?[1-9]|1[0-2])/([0-2]?[0-9]|3[0-1])/[1-2]\d{3}) (20|21|22|23|[0-1]?\d{1}):([0-5]?\d{1})$

再说一个问题,如果我输入错误的格式,会显示错误消息,但是对于空时间,它不会显示错误消息。 - Lakshmitha
@Lakshmitha,我已经更新了我的正则表达式。请尝试并告诉我是否有任何问题。 - Harun
@Harun,谢谢。现在它可以工作了。但是你给出的是dd/MM/yyyy HH:MM格式。我只需要MM/dd/yyyy HH:MM格式。我尝试过很多次编辑这个表达式来改变成MM/dd,但是我无法做到。你能解释一下如何编辑吗? - Lakshmitha
@Lakshmitha,抱歉更新有误。我已经再次更新了express。我检查了格式,希望这次能对你有所帮助。 - Harun
实际上需要转义斜杠。这是在这种情况下实际起作用的正则表达式:^(([0]?[1-9]|1[0-2])\/([0-2]?[0-9]|3[0-1])\/[1-2]\d{3}) (20|21|22|23|[0-1]?\d{1}):([0-5]?\d{1})$ - kakoma

2
使用 DateTime.ParseDateTime.TryParse(也有等价的ParseExactTryParseExact)来解析日期时间。如果字符串不表示有效的DateTime,则无法解析。
DateTime myDateTime = DateTime.ParseExact(myString, 
                                          "MM/dd/yyyy hh:mm", 
                                          CultureInfo.InvariantCulture);

如果值无法解析,以上代码将抛出异常。如果您想避免异常被抛出,可以使用“Try”变体 - 这需要一个“out”参数,并测试函数的返回值是否成功。请注意保留HTML标签。

3
根据提问者要求“任何JavaScript函数”,我认为C#代码并不实用。看起来提问者需要客户端验证。 - Gabe
@Gabe - OP已经使用C#标记了问题,因此我的回答是针对C#的。我认为这个问题也在询问解析,而不一定是使用JS。 - Oded
看起来 OP 使用 C# 编写了他们的 ASP.NET 页面,但是正在寻找客户端验证。 考虑到他们要求正则表达式或 JavaScript 函数,因此我删除了 C# 标签。 - Gabe

2

如果您需要正则表达式,可以使用以下内容:

^(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d ([01]\d|2[0-3]):[0-5]\d$

0

以下正则表达式:

^([1-9]|([012][0-9])|(3[01]))\/([0]{0,1}[1-9]|1[012])\/([1-2][0-9][0-9][0-9]) [0-2][0-9]:[0-9][0-9]

会得到以下结果:

2021年03月03日 02:12


-1
您可以尝试以下函数,用于验证 "dd/MM/yyyy HH:mm" 格式的日期。
    function ValidateDate(dt) {
        try {
            var isValidDate = false;
            var arr1 = dt.split('/');
            var year=0;var month=0;var day=0;var hour=0;var minute=0;var sec=0;
            if(arr1.length == 3)
            {
                var arr2 = arr1[2].split(' ');
                if(arr2.length == 2)
                {
                    var arr3 = arr2[1].split(':');
                    try{
                        year = parseInt(arr2[0],10);
                        month = parseInt(arr1[1],10);
                        day = parseInt(arr1[0],10);
                        hour = parseInt(arr3[0],10);
                        minute = parseInt(arr3[1],10);
                        //sec = parseInt(arr3[0],10);
                        sec = 0;
                        var isValidTime=false;
                        if(hour >=0 && hour <=23 && minute >=0 && minute<=59 && sec >=0 && sec<=59)
                            isValidTime=true;
                        else if(hour ==24 && minute ==0 && sec==0)
                            isValidTime=true;

                        if(isValidTime)
                        {
                            var isLeapYear = false;
                            if(year % 4 == 0)
                                 isLeapYear = true;

                            if((month==4 || month==6|| month==9|| month==11) && (day>=0 && day <= 30))
                                    isValidDate=true;
                            else if((month!=2) && (day>=0 && day <= 31))
                                    isValidDate=true;

                            if(!isValidDate){
                                if(isLeapYear)
                                {
                                    if(month==2 && (day>=0 && day <= 29))
                                        isValidDate=true;
                                }
                                else
                                {
                                    if(month==2 && (day>=0 && day <= 28))
                                        isValidDate=true;
                                }
                            }
                        }
                    }
                    catch(er){isValidDate = false;}
                }

            }

            return isValidDate;
        }
        catch (err) { alert('ValidateDate: ' + err); }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接