• 締切済み

Javascriptで日付毎のチェックボックスを判断する方法

JAVAで予約できるカレンダーを作成するという課題が学校で出てしまい非常に困っています。 仕様: カレンダー関数により、年・月・日を取得しています。 Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); int YEAR = cal.get(Calendar.YEAR); int MONTH = cal.get(Calendar.MONTH)+1; int DATE = cal.get(Calendar.DATE); 下記の機能を”Javascript”で実現したいのですが、力不足でどうすることもできません。 実装したい機能: 予約の日付はカレンダー上にある日付毎に設置されたチェックボックスで判断します。予約できる日付は、選択した日付から前後連続した日付けのみ選択可能で、他の日付をまたいで予約することはできないようにする、というものです。 例をあげてみます。 10月10日のチェックボックスを選択したとします。選択した時点で10月の9、10、11日のみチェックボックスにチェックが可能となり、その他はdisabledにします。 次に10月11日のチェックボックスを選択すると、選択した時点で10月の9、12日が選択できるようになります。予約は連続した日付のみ可能ですので、10、11日とその他はdisabledにしなくてはなりません。 どのようなアドバイスでもかまいません。 回答をお願いします。

みんなの回答

回答No.1

>どのようなアドバイスでもかまいません。 と、あるし、「課題」なんだから、ふつうじゃなく、たまには みじかく&なんどくに。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>極小コードに挑戦!</title> <style type="text/css"> </style> <script type="text/javascript"> var c,y,m,x,b,h,d; with(new Date)c=-new Date(y=getFullYear(),m=getMonth()).getDay(x=new Date(y,++m,0).getDate(b=-1)) h='<form action="#"><table border="1"><caption>'+y+'/'+m+'<tr>'+'日月火水木金土'.replace(/(.)/g,'<th>$1') while((b++>5?b=0:b)|c<x)h+=(b?'':'<tr>')+'<td>'+(++c<1|c>x?'-':c+'<input type="checkbox" name="day">'); document.write(h+'</table><input type="hidden" id="base"></form>'); d=document.getElementsByName('day'); document./*@cc_on @if(1)attachEvent('on'+@else@*/addEventListener(/*@end@*/'click',function(e,o){ o=e./*@if(1)srcElement@else@*/target/*@end@*/;if(o.nodeName=='INPUT'&&o.type=='checkbox')j(o); },false); function j(o){m=c=0;while(y=d[c++]){if(y==o)m=c;y.disabled=true};c=3;while(c--)d[m-c]&&(d[m-c].disabled=false);document.getElementById('base').value=m;} j(d[(new Date).getDate()-1]); </script> checkboxをdisabledにすると、そうしんされるのは、つねに3こに なるのじゃないかな? なので、baseというところに、ひづけもかくようにしたじょ。 がんばれば、もっとみじかくなりそうだけど・・・。 つきはじめと、げつまつのひは、くりこしたりするのか? かれんだーのせいせいは、かこの http://okwave.jp/qa4373884.html をしゃくようしたじょ。ばぶぅ。

amissary
質問者

お礼

回答ありがとうございます。 思ったとおりの動きができるようになりました。 自らの力では時間がかかる一方だったと思います。 ちなみに、月の初めと月末の日は繰越します。 なので実際表示されるカレンダー数は、2つです。

関連するQ&A

  • Calendarクラスの日付更新について

    ある日付を追加した時,うまく正式な日付になりません。 (1) 2002年9月30日にセットする (2) 1日追加する --→この時点で2002年9月31日になっている。 (3) 10月1日に正式な日付に直す という流れなのですが・・・ ソースは以下のとおりです。 public static void main(String[] args) {        Calendar cal = new GregorianCalendar();     /*(1)*/     cal.set(2002,9,30);    /*(2)*/     cal.add(Calendar.DATE,1); /*(3)*/ cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE) ); System.out.println(cal.get(Calendar.YEAR) "年"+ cal.getCalendar.MONTH) +"月"+ cal.get(Calendar.DATE) +"日"); } と、表示させると2002年10月1日になっておらず2002年9月31日になったままです。 これはどこに原因があるのでしょうか?ご指導お願いします。

    • ベストアンサー
    • Java
  • Java CDLC 1.0 での日付計算

    CLDC(携帯向けJava)での日付計算がうまくいきません。 JavaのSEでは、Calender.addなる日付計算関数があるようですが、 CLDC(携帯向けJava)では使えないみたいなので、以下の実験コードを 書いてみました。しかし、意図する結果が得られませんでした。 このケースでのよい計算方法をご存知でしたらご教授 頂ければうれしく思います。または、 以下のプログラムのバグ、ポカアホミス、作法的要修正点、 日付計算仕様的な可能/不可能等お気づきありましたら、 ご指摘頂ければ嬉しいです。 尚、意図した結果とは、下記の★部分において、 1970年1月1日(?曜日) 0:1:0 です。 グリニッジ標準時 1970 年 1 月 1 日 0:00:00 (エポック) からの 経過時間が、60000ミリ秒(60秒) というのを期待しました。 --以下コード-- void print_cal(Calendar cal){ String WEEK=" 日月火水木金土"; int year =cal.get(Calendar.YEAR); int month =cal.get(Calendar.MONTH)+1; int day_of_month=cal.get(Calendar.DAY_OF_MONTH); int day_of_week =cal.get(Calendar.DAY_OF_WEEK); int hour =cal.get(Calendar.HOUR_OF_DAY); int minute =cal.get(Calendar.MINUTE); int second =cal.get(Calendar.SECOND); System.out.println("" + year + "/" + month + "/" + day_of_month + "(" + WEEK.charAt(day_of_week) + ") " + hour + ":" + minute + ":" + second); } Calendar cal = Calendar.getInstance(); long now = cal.getTime().getTime(); print_cal(cal); cal.set(Calendar.YEAR, 2007); cal.set(Calendar.MONTH, Calendar.MAY); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 6); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 44); print_cal(cal); //<---- 2007/5/31(木) 6:12:44 long time1 = cal.getTime().getTime(); cal.set(Calendar.YEAR, 2007); cal.set(Calendar.MONTH, Calendar.MAY); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 6); cal.set(Calendar.MINUTE, 13); cal.set(Calendar.SECOND, 44); long time2 = cal.getTime().getTime(); print_cal(cal); //<------ 2007/5/31(木) 6:13:44 long sabun = time2 - time1; //<---- 60000 Date hoge = new Date(sabun); long hoge_time = hoge.getTime(); System.out.println(hoge_time); <--- 60000 //setTime: Calendar の現在の時刻を、指定された Date に。 cal.setTime(hoge); //★この時点でprint_cal。 print_cal(cal); <---- 1970/1/1(木) 9:1:0 ?9時間も経ってる? long now2 = cal.getTime().getTime(); System.out.println("now2: " + now2); <--- 60000。でも60秒がはいってるぽい --コード以上--

    • ベストアンサー
    • Java
  • 日付の比較(Beforeメソッド)

    WIN XP j2sdk1.4.2_04 です。 宜しくお願いします。 int chkYear = 2004 int chkMonth = 07 int chkDay = 26 Calendar cal1 = new GregorianCalendar(); Calendar cal2 = new GregorianCalendar(chkYear,chkMonth-1,chkDay); cal1.get(cal1.YEAR); cal1.get(cal1.MONTH); cal1.get(cal1.DATE); if(cal2.before(cal1) == true){  処理 } cal1 で現在の日時を取得し Beforeメソッドで cal2 の値が現在日時より過去だったらエラーを返す ような処理にしてます。 Cal2に当日の日付を入力すると 過去の日付となってしまいます。 前日と翌日はきちんと動作しますが、 当日だけがうまく行きません。 なにか良い方法はありますでしょうか?

    • ベストアンサー
    • Java
  • Java 日付の加算がうまくいきません。。どなたか助けてください・・・

    初歩的質問で申し訳ないのですが、ご存知の方ご教授ください。日付の加算についてどうしてもわからない箇所があります。 Calendar cal= Calendar.getInstance((TimeZone.getTimeZone("GMT"))); int year = 2007; int month = 1; int day = 1; cal.set(year,month,day); cal.add(Calendar.DAY_OF_MONTH,100); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String tempDate=sdf.format(date); tempDate=2007/05/12 私が求めている結果は tempDate=2007/4/11 なのですが、tempDate=2007/05/12になってしまいます。 お願いします。 環境:WinXp pro Eclipse 3.1 JDK 1.4.2 2007/4/11は Oracle8i の実行結果です。 select to_date('2007-01-01') +100 from dual

    • ベストアンサー
    • Java
  • 日付と曜日が合わない

    javaのPGを作成しています。 内容的には1週間分のカレンダーを表示しようと思っているのですが・・・・・ Calendarクラスを使用して、対象の日付と曜日を取得しようとしているのですが、 年月日は指定のものが取得できているようなのですが、曜日だけはおそらく来月の曜日を 取ってしまっているようです。 原因がまったく分かりません。 下に、Calendarクラスを使用した部分を抜粋した ソースを記述するので、なにが原因か教えていただけないでしょうか? 【jspファイル内】 <% Calendar cal= Calendar.getInstance(); cal.set( 2010, 11, 25 ); // ※実際は変数だが、正しい値が入っているのは確認済み %>                  ・                  ・                  ・ for ( int loopCnt = 0; loopCnt < 7; loopCnt ++ ){         if ( loopCnt > 0 ){             cal.add(Calendar.DATE,1);         }     // デバッグ用     out.print( cal.get(Calendar.YEAR));     out.print( cal.get(Calendar.MONTH));     out.print( cal.get(Calendar.DATE));     out.print( cal.get(Calendar.DAY_OF_WEEK)); } 【実行結果】 2010 11 25 7 2010 11 26 1 2010 11 27 2 2010 11 28 3 2010 11 29 4 2010 11 30 5 2010 11 31 6

    • ベストアンサー
    • Java
  • oracleのsqlで日付判断

    テーブルに以下の以下の様に日付が登録されています。、 cal_year cal_month cal_day item1 item2 item3 ・・・・・・ : 2019 6 29 2019 6 30 2019 7 1 2019 7 2 ; 2019 7 10 2019 7 11 ; 2019 7 20 2019 7 21 : 2019 7 31 2019 8 1 2019 8 2 : 見ての通り、テーブルに登録されている日付が、年、月、日と各々で 登録されており、また、月と日には、ゼロ埋めされてない値となって います。 因みに、cal_year、cal_month、cal_dayの属性は、varchar2です。 以下のsqlで、日付指定で、システム日付より以降の日付のデータを 取得しようとしているのですが、上手く行きません。 select * from tableA where cal_year||cal_month||cal_day>to_char(sysdate,'FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 今日、2019/7/22でやると、「2019 7 3」以降が出力されます。 また、日付を直接指定するとエラーとなります。 select * from tableA where cal_year||cal_month||cal_day>to_char('2019722','FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 「SQL : ORA-01481: 数値書式モデルが無効です」となります。 何がいけないのでしょうか。 このような使い方はダメなのでしょうか。 それとも、使わない使い方をしているのでしょうか。 お願いいたします。

  • java コマンドライン引数を利用したカレンダー

    args[0]に例えば200805と入れたら2008年5月のカレンダーが表示される、そんなプログラムを書きたいと思っています。 理想は↓の形です。(_は空欄の意です;) 2008年5月 日 月 火 水 木 金 土 ___________1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 importは使わないよう指示が出ていますので、フルネームでカレンダークラスを記載しています。 public class CalShow { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ java.util.Calendar cal = java.util.Calendar.getInstance(); //コマンドライン引数の前4桁をyear、 int year = Integer.parseInt(args[0].substring(0, 4)); //後ろ2桁をmonthとしてそれぞれintで定義 int month = Integer.parseInt(args[0].substring(4)); System.out.println( year + "年" + month + "月"); System.out.println(" 日 月 火 水 木 金 土"); cal.set(year, month - 1, 1); int startDay = cal.get(java.util.Calendar.DAY_OF_WEEK); cal.add(java.util.Calendar.MONTH, 1); cal.add(java.util.Calendar.DATE, -1); int lastDay = cal.get(java.util.Calendar.DATE);      /*なんとなくここまで書けたのですが、ここからどのように木曜日と1日を繋げていけばよいのか分からなくて困っています。 どういったメソッドを使えばいいのかなど、どなたか教えていただけませんでしょうか? よろしくお願いいたします。*/ } }

    • ベストアンサー
    • Java
  • java Calendarクラス

    javaで月、日を入力してカレンダーを作成したのですが 年と月のsetでmonth-1はマジックナンバーなので直したいのですが どなたかわかる方教えてください。 package sample; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Test { private final static int firstday = 1; public static void main(String[] args) { //カレンダーのインスタンスを取得します Calendar cal = Calendar.getInstance(); //文字入力 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //年を取得 int year =0; //月を取得 int month =0; //最後の日付 int lastDay =0; //月初めの曜日を取得 int week =0; //年妥当性チェック boolean CheckYear = true; //月妥当性チェック boolean CheckMonth = true; try { //年妥当性チェック while(CheckYear){ System.out.println("年を入力してください"); //年を入力します year = Integer.parseInt(input.readLine()); //年が4桁の場合 if(String.valueOf(year).length()==4){ CheckYear = false; }else{ System.out.println("年は4桁で入力してください"); } } //月妥当性チェック while(CheckMonth){ System.out.println("月を入力してください"); //月を入力します month = Integer.parseInt(input.readLine()); //月が1~12の場合 if(month>=1&&month<=12){ CheckMonth = false; }else{ System.out.println("月1~12を入力してください"); } } }catch(IOException e){ System.out.println("数字以外は入力しないでください"); System.out.println("処理を中断します"); return; }catch (Exception a) { System.out.println("数字以外は入力しないでください"); System.out.println("処理を中断します"); return; } //年、月をセットします cal.set(year,month-1,cal.getActualMinimum(Calendar.DATE)); //月初めの曜日を取得 week = cal.get(Calendar.DAY_OF_WEEK); //年月を出力する System.out.println(String.valueOf(year)+"年"+String.valueOf(month)+"月"); //曜日を出力する System.out.println("日 月  火  水  木  金  土"); //最後の日付を取得する lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); /* * 最後の日付を取得する */ if(month==1||month==3||month==7||month==8||month==10||month==12) { lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(month==4||month==6||month==9||month==11){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(year%4==0&&month==2){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); }else if(year%4!=0&&month==2){ lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); } /* * カレンダーを出力する */ //最後の日付まで繰り返す // 最後の日付まで繰り返す for (int i = 1; i <= lastDay; i++) { // 1日とそれ以外で分岐する if (i == 1) { // 1日の曜日位置まで移動する for (int j = 1; j < cal.get(Calendar.DAY_OF_WEEK); j++) { System.out.print(" "); } } else { // 日付を増やす cal.add(Calendar.DAY_OF_MONTH, firstday); } // 1~9と10~で表示を変える if (i < 10) { System.out.print(" " + i); } else { System.out.print(" " + i); } // 土曜日になったら改行する if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { System.out.println(""); } } } }

  • javaでの時刻更新

    javaの時刻更新について質問です。 jLabel4.setText(year + "/" + month + "/" + day + " " + dow+ " " + hour + ":" + minute ); に入る時刻を1秒間隔で更新したいのですが、どうしたらいいのか分からないのです。 他のサイトでtimerが使えると聞いたので調べてみたのですが、よくわからなくて。。。 プログラムのどこから記述していいのかさっぱりで。 分かる方には馬鹿な質問ですが、よろしければお知恵をお貸しください。 private void tokei() { Calendar cal1 = Calendar.getInstance(); //(1)オブジェクトの生成 int year = cal1.get(Calendar.YEAR); //(2)現在の年を取得 int month = cal1.get(Calendar.MONTH) + 1; //(3)現在の月を取得 int day = cal1.get(Calendar.DATE); //(4)現在の日を取得 int hour = cal1.get(Calendar.HOUR_OF_DAY); //(5)現在の時を取得 int minute = cal1.get(Calendar.MINUTE); //(6)現在の分を取得 StringBuffer dow = new StringBuffer(); switch (cal1.get(Calendar.DAY_OF_WEEK)) { //(8)現在の曜日を取得 case Calendar.SUNDAY: dow.append("日曜日"); break; case Calendar.MONDAY: dow.append("月曜日"); break; case Calendar.TUESDAY: dow.append("火曜日"); break; case Calendar.WEDNESDAY: dow.append("水曜日"); break; case Calendar.THURSDAY: dow.append("木曜日"); break; case Calendar.FRIDAY: dow.append("金曜日"); break; case Calendar.SATURDAY: dow.append("土曜日"); break; } jLabel4.setText(year + "/" + month + "/" + day + " " + dow + " " + hour + ":" + minute ); } }

  • 週単位の日付の加算

    すみませんが、どなたか教えて下さい。 日付の加算を4週間後、というような日付の加算をしたいのですが、 28日や31日の月があった場合、ずれてしまいます。 どのようにしたら正確なカレンダー通り加算ができるでしょうか? 「20060404」の結果が欲しいが下記だと、「20060405」となってしまう。 Calendar cal = Calendar.getInstance(); cal.set(2006,3,7); int plus = 7*4; //7日×4週間 cal.add(Calendar.DATE, plus);

    • ベストアンサー
    • Java

専門家に質問してみよう