こんなフォームで
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 |
開始日<br /> <select name="sy"> <option value="2008">2008年</option> </select> <select name="sm"> <option value="1">1月</option> <option value="1">2月</option> </select> <select name="sd"> <option value="1">1日</option> <option value="2">2日</option> </select> ~<br /> 終了日時<br /> <select name="ey"> <option value="2008">2008年</option> </select> <select name="em"> <option value="1">1月</option> <option value="1">2月</option> </select> <select name="ed"> <option value="1">1日</option> <option value="2">2日</option> </select> |
終了日時に開始日時より前の日時が選択されていたらアラートを出す、というJavaScriptを作ろうと思い、こんな感じで書いてみた。
1 2 3 |
startyear = フォームの開始年の値; endyear = フォームの終了年の値; if(startyear > endyear){ ... |
しかし問題発生。
月や日の指定などで一桁と二桁を選択する、たとえば2月と12月というふうに選ぶと、2の方が大きいといわれてしまう。どうやら文字列として扱われているらしい。
解決方法は2つ。
- eval関数を使う
123startyear = eval(フォームの開始年の値);endyear = eval(フォームの終了年の値);if(startyear > endyear){ ... - Date型オブジェクトを生成しgetTimeを使う
12345start = new Date(開始年, 開始月, 開始日);end = new Date(終了年, 終了月, 終了日);s = start.getTime();e = end.getTime();if(s > e){ ...
個人的な好みは2つ目かな。