【问题标题】: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

标签: javascript java grails


【解决方案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() ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 2011-10-31
      • 2011-09-03
      相关资源
      最近更新 更多