检查日期是不是存在(第 30 天/第 31 天)[重复]

Posted

技术标签:

【中文标题】检查日期是不是存在(第 30 天/第 31 天)[重复]【英文标题】:Check whether the Date exists (30th / 31th day) [duplicate]检查日期是否存在(第 30 天/第 31 天)[重复] 【发布时间】:2017-02-09 00:49:49 【问题描述】:

如何检查一个月的第 30 天或第 31 天是否存在。

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

提前致谢

【问题讨论】:

把字符串改成日期,再改回字符串。如果字符串相等,则为有效日期;否则,它不是。 我认为可能有更简单的解决方案。这也是我的第一个想法。非常感谢。 @AndyTurner 那么日期 12/31/2016 不存在吗?因为它不会在美国。当然,这是显而易见的,因此它可能会被正确检测到 - 请在 2016 年 5 月 6 日试一试。 @vlaz 好吧,我不知道 - 存在吗?取决于您是否要处理不同格式的要求。也就是说,只有 6 种方法可以订购年、月和日 - 您可以随时尝试所有六种排列,看看是否有任何一种是有效的,它仍然比 AJAX 调用快得多。 请注意,在某些年份的某些二月,29 日无效。顺便说一句en.wikipedia.org/wiki/February_30 【参考方案1】:

我认为您应该使用 momentjs 库在 javascript 中进行任何类型的日期操作: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控制台

【讨论】:

完美。正常工作。非常感谢。验证由 inputmask 完成,但无法检查这种特殊情况。【参考方案2】:

@nagyf 的答案对 js 来说非常好,在 java 方面你应该在DateFormat 中将 leninent 属性设置为 false,然后你会得到一个 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);

【讨论】:

不知道这个。谢谢。 :) 不客气!!!!【参考方案3】:

这是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");

【讨论】:

不要捕捉Exception:尽可能捕捉最具体的异常(即ParseException),这样你就不会把不相关的问题混为一谈。 @AndyTurner 同意你的看法。我忘了那个例外,谢谢你提醒我:)【参考方案4】:

如果您使用有效日期和给定的 lastDay 来检查给定的 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

【讨论】:

【参考方案5】:

java.time

YearMonth 类很方便。该对象可以提供一个LocalDate 对象,表示该月的最后一天。您可以询问该对象的月份编号。

int numberOfLastDay =
    YearMonth.of( 2016 , Month.SEPTEMBER )
        .atEndOfMonth()
        .getDayOfMonth() ;

【讨论】:

以上是关于检查日期是不是存在(第 30 天/第 31 天)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql 如何把一年中的第几天,比如第300天 ,转换成日期

MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030

在文件夹中存在的多个文件中将日期部分动态替换为当前日期 -15 天

《30天自制操作系统》第9天

用java 输出合理的日期,从一月到12月。4,6,9,11月有30天,2月 28天,其他都是31天

python代码判断指定日期是当前年的第多少天