2016-09-30 77 views
1

如何检查一个月的30天或31天是否存在。检查日期是否存在(第30天/第31天)

31.09.2016不存在,但将在Java和Javascript中显示为01.10.2016。即使使用正确的语言环境等,任何JavaScript或Java解决方案都是受欢迎的,因为ajax请求也可以解决此问题。

在此先感谢

+1

将字符串更改为日期,并返回字符串。如果字符串相同,则是有效日期;否则,它不是。 –

+0

我认为可以有一个更简单的解决方案。这也是我的第一个想法。非常感谢你。 – Moonstar

+0

@AndyTurner那么日期12/31/2016不存在吗?因为它不会在州内。当然,这是明显的,所以它可能被正确检测 - 与05/06/2016一起试用。 – vlaz

回答

5

我认为你应该在JavaScript中使用momentjs库以任何一种方式操控:MomentJS

var date = moment('31.09.2016','DD.MM.YYYY'); 
console.log(date.isValid()); // This will print false in case of an invalid date 

编辑:创建一个plunker所以你可以尝试一下: plunker example 。检查JavaScript控制台

+0

完美。按原样工作。非常感谢你。验证是通过inputmask完成的,但无法检查这个特殊情况。 – Moonstar

3

@nagyf答案是JS还不错,在Java端,你应该设置leninent属性设置为false在DateFormat,然后如果日期是无效的,你会得到一个ParseException的

例子:

final String d = "31/09/2016"; 
final DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
df.setLenient(false); 
final Date parsDate = df.parse(d); 
System.out.println(d); 
+0

不知道这个。谢谢。 – Moonstar

+0

:)不客气!!!! –

1

这里是Java

解决
try{ 
    String date = "31/9/2016"; 
    Data d = new Date(); 
    DateFormat df = new SimpleDateFormat("đd/MM/yyyy"); 
    df.setLenient(false); 
    d = df.parse(date); 
catch(ParseException ex){ 
    System.out.println("Invalid Date"); 
} 
+1

不要抓住'Exception':捕获最可能发生的异常(即'ParseException'),这样就不会混淆不相关的问题。 –

+0

@AndyTurner同意你的意见。我忘了这个例外,感谢提醒我:) –

0

,如果你是一个有效的日期和工作的检查LASTDAY给出VS究竟是日历上的另一种方式是给出lastDay:(不是在groovy/java中的javascript)

int day=31 
Date givenDate = new Date() 
Calendar cal = Calendar.instance 
cal.setTime(givenDate) 
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH) 
if (day > lastDay) { 
// fail throw exception 
} 
//otherwise good to go 
0

java.time

YearMonth类对此很方便。该对象可以提供表示月份的最后一天的LocalDate对象。您可以向该对象查询其日期编号。

int numberOfLastDay = 
    YearMonth.of(2016 , Month.SEPTEMBER) 
     .atEndOfMonth() 
     .getDayOfMonth() ; 
相关问题