2016-09-30 2 views
1

, как проверить, существует ли 30 или 31-й день месяца или нет.Проверьте, существует ли дата (30-й/31-й день)

31.09.2016 не существует, но будет отображаться как 01.10.2016 в Java и Javascript. Даже с правильными локалями и т. Д. Любые решения в javascript или java приветствуются, так как запрос ajax также может решить эту проблему.

Заранее спасибо

+1

Измените строку на дату и вернитесь к строке. Если строки равны, это действительная дата; в противном случае это не так. –

+0

Я думал, что может быть более простое решение. Это была моя первая мысль. Большое спасибо. – Moonstar

+0

@ AndyTurner, так ли дата 12/31/2016 не существует? Потому что это не было бы в государствах. Конечно, это очевидно, так что это может быть обнаружено правильно - попробуйте с 05/06/2016. – vlaz

ответ

5

Я думаю, вы должны использовать 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 

Edit: Создано plunker, так что вы можете попробовать это: plunker example . Проверьте консоль JavaScript

+0

Perfect. Работает так, как должно. Большое спасибо. Проверка выполняется с помощью inputmask, но не была способна проверить этот специальный случай. – Moonstar

3

Ответ от @nagyf довольно хорошо для JS на стороне Java вы должны установить leninent свойство ложным в 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

Не ловите «Исключение»: поймайте наиболее конкретное исключение, которое вы можете (например, 'ParseException'), чтобы вы не сталкивались с несвязанными проблемами. –

+0

@ AndyTurner Согласился с вами. Я забыл это исключение, спасибо, что напомнил мне :) –

0

Альтернативный способ проверки lastDay дал против того, что на самом деле на календаре будет, если вы работаете с действительной датой и учитывая lastDay: (не в JavaScript в заводной/Java)

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() ; 
Смежные вопросы