前提・実現したいこと
1986年5月29日から入力された年月日までの経過日数を表示するプログラムを書いています。
また、過去日が入力された場合の処理と日時以外が表示された場合の処理も作りたいのですが、
下記のコードでのif文if (year > 1986 || (month >= 5 || day >= 29))
で上手く弾けずマイナスで表示されてしまいます。日時以外の処理のif文であるif (isNaN(year) == false || isNaN(month) == false || isNaN(day) == false)
では何も入力しないと過去日として判定されてしまうのでこの2点を解決したいです。
該当のソースコード
JavaScript
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <script> <!-- var date = new Date(1986, 5, 29); var year = prompt('年を入力してください'); var month = prompt('月を入力してください'); var day = prompt('日を入力してください'); if (isNaN(year) == false || isNaN(month) == false || isNaN(day) == false) { if (year > 1986 || (month >= 5 || day >= 29)) { var date1 = new Date(year, month, day); date.setMonth(date.getMonth() - 1); var mm = date1.getTime() - date.getTime(); var day1 = (mm / (1000 * 60 * 60 * 24)) - 31; console.log(day1 + '日経過しています'); } else { console.log("入力された日付が過去日です") } } else { console.log("年月日を入力してください"); } --> </script> </body> </html>
修正後
int32_tさんのアドバイスを参考にコードを修正し大分形になりましたが、
年月日全て入力しないとしっかり何も入力されていない処理がされるのですが
最初に年数を入力した後に月や日付を入力しないと過去日として扱われてしまいます。
解決方法があれば教えてください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <script> <!-- var date = new Date(1986, 5, 29); var year = prompt('年を入力してください'); var month = prompt('月を入力してください'); var day = prompt('日を入力してください'); if (isNaN(parseInt(year)) == false || isNaN(parseInt(month)) == false || isNaN(parseInt(day)) == false) { if (year > 1986 || year == 1986 && month > 5 || year == 1986 && month == 5 && day >= 29) { var date1 = new Date(year, month, day); date.setMonth(date.getMonth() - 1); var mm = date1.getTime() - date.getTime(); var day1 = (mm / (1000 * 60 * 60 * 24)) - 31; console.log(day1 + '日経過しています'); } else { console.log("入力された日付が過去日です") } } else { console.log("年月日を入力してください"); } --> </script>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。