あります。
誕生日勘定関数birth()、
うるう年対応関数uruu()
はそれぞれ単独で作動することを確認しています。
がbirth()にuruu()を組み込むと作動しなくなります。
どうしたら解決するのでしょうか?
<script language="JavaScript">
<!--
function birth(){
set_m = eval(document.myForm.formm.value);
set_d = eval(document.myForm.formd.value);
if(set_m<1 || set_m>12){
alert("正しい月日を入力してください!");
return false;
}
if(set_m ==2 && set_d>29){
alert("正しい月日を入力してください!");
return false;
}
if(set_m ==1 | set_m ==3 | set_m ==5 | set_m ==7 | set_m ==8 | set_m ==10 |set_m ==12){
if(set_d<1 || set_d>31){
alert("正しい月日を入力してください!");
return false;
}
}else if(set_d <1 | set_d>30){
alert("正しい月日を入力してください!");
return false;
}
if(set_m ==2 && set_d ==29)
uruu();
else if{
now = new Date();
b = now.getYear();
spday= new Date (b,set_m-1,set_d);
spday2 = new Date(b-1,set_m-1,set_d);
spday3 = new Date(b+1,set_m-1,set_d);
a = (spday.getTime() - now.getTime())/(24*60*60*1000);
a = Math.ceil(a);
c = (spday2.getTime() - now.getTime())/(24*60*60*1000);
c = Math.ceil(c);
d = (spday3.getTime() - now.getTime())/(24*60*60*1000);
d = Math.ceil(d)
aa = Math.abs(a);
cc = Math.abs(c);
dd = Math.abs(d);
if(aa==0) document.write("誕生日おめでとう!!");
else if( a<0 && dd>aa && aa<cc) document.write("誕生日から",aa,"日過ぎました・・・");
else if(a<0 && aa>=dd && dd<cc) document.write("あと",dd,"日で誕生日です。");
else if(aa<=cc && aa<dd) document.write("あと",aa,"日で誕生日です。");else if(aa>cc && cc<dd ) document.write("誕生日から",cc,"日過ぎました・・・");
}
}
function uruu(){
now = new Date();
b = now.getYear();
spday = new Date(b,2-1,29);
a = (spday.getTime()- now.getTime())/(24*60*60*1000);
a = Math.ceil(a);
aa = Math.abs(a);
if(a<0){
if(b%4==0)
document.write("誕生日から",aa,"日経過しました。");
else if(b%4==1)
document.write("誕生日から",365+aa,"日経過しました。");
else if(b%4==2)
document.write("あと",365+365-aa,"日で誕生日です。");
else if(b%4==3)
document.write("あと",365-aa,"日で誕生日です。");
}else if(a>0){
if(b%4==0)
document.write("あと",aa,"日で誕生日です。");
else if(b%4==1)
document.write("誕生日から",365-aa,"日経過しました。");
else if(b%4==2)
document.write("誕生日から",365+365-aa,"日経過しました。");
else if(b%4==3)
document.write("あと",365+aa,"日で誕生日です。");
}else if(a==0)
document.write("誕生日おめでとう!!");
}
-->
</script>
<form name="myForm">
<input type="text" name="formm" size=2>月
<input type="text" name="formd" size=2>日
<input type="button" value="誕生日勘定する" onClick="birth()">
</form>
No.2ベストアンサー
- 回答日時:
はじめまして。
これ自体は
if(set_m ==2 && set_d ==29)
uruu();
else if{
↑このifを削除すれば動きます。
=======
でも空白や数字以外でボタン押されるとエラーになるので
set_m = document.myForm.formm.value;
set_d = document.myForm.formd.value;
if(set_m<1 || set_m>12 ||set_m==""||set_m.match(/[0-9]+/g)!=set_m){
alert("正しい月を入力してください!");
return false;
}else{
set_m=Math.floor(set_m,0);
}
if(set_d<1 || set_m>32 || set_d==""||set_d.match(/[0-9]+/g)!=set_d){
alert("正しい日を入力してください!");
return false;
}else{
set_d=Math.floor(set_d,0);
}
if(set_m ==2 && set_d>30){
alert("正しい日を入力してください!");
return false;
}else if((set_m ==4 || set_m ==6 || set_m ==9 || set_m ==11)&&(set_d>31)){
alert("正しい日を入力してください!");
return false;
}else if(set_m ==2 && set_d==29){
uruu();
}else{
now = new Date();…
こんな感じでどうでしょう?
最低限ならこの程度の修正でどうですか?
勉強中の身なのでmatch()など
初めて調べて納得しているところです。
本当に初心者ならではのミスで、申し訳ありません。
少しづつ身に着けていきます。
本当にありがとございました。m(__)mペコリ
No.1
- 回答日時:
ロジックがグダグダですね・・・
もうすこし整理した方がよいですね
たとえばこんな感じでどうでしょう?
<script>
function birth(){
var set_m = parseInt(document.getElementById('myForm').elements['formm'].value);
var set_d = parseInt(document.getElementById('myForm').elements['formd'].value);
var theday=new Date();
var today=new Date();
theday.setMonth(set_m -1);
theday.setDate(set_d);
if(theday.getMonth()!=set_m -1 || theday.getDate()!=set_d){
alert("正しい月日を入力してください!");
return false;
}
var a=(theday - today)/(60*60*24*1000);
if(a==0){
alert("誕生日おめでとう!!");
}else if(a>0){
alert("あと"+a.toString()+"日で誕生日です。");
}else{
alert("誕生日から"+(-a).toString()+"日経過しました。");
}
}
</script>
<form id="myForm">
<input type="text" name="formm" size=2>月
<input type="text" name="formd" size=2>日
<input type="button" value="誕生日勘定する" onClick="birth()">
</form>
ご回答ありがとうございます。
正しい月日の絞り込みは分かりました。一生懸命に勉強します。
しかしこのスクリプトでしたいことは、昨年、今年、来年の誕生日のうち近いものからのコメントを表示することがしたいのです。最も小さい数値で表現するということです。絶対値比較はそのためのものです。
うるう年2月29日生まれに対応すべく、
a>0,a==0,a<0で判別後に、西暦年を4の剰余算でその年のその日の状況に応じて、最も小さい数値で=もっとも近い誕生日からのコメント表現にしたいということです。
うるう年関数では西暦年4の剰余算2年で2月28日までは、経過コメント、同年3月1日からはカウントダウンコメントにしたいということです。
うるう年の半分の切り替えポイントは西暦年剰余算2年2月29日です=存在しませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現で複数マッチ条件で悩...
-
return trueとreturn falseの用...
-
RegularExpressionValidatorの...
-
ツリービューのチェックボック...
-
テキストボックスに数字しか入...
-
slickのレスポンシブ > center...
-
未選択のプルダウンメニューを...
-
TEXTAREAに入力した改行コード...
-
COBOLの数字チェック
-
マウスをブラウザの外に出した...
-
<JavaScript>tableタグを入力不...
-
プルダウン 項目が多いので先頭...
-
hiddenのvalueの値を変えたい
-
【jsp/Java】チェックボックス...
-
Javascriptでのbuttonのname属...
-
onchangeイベントを強制的に発...
-
javascript作成してます。ラジ...
-
POST時に要素を削除してからPOST
-
JavaScriptにて動的に配列を作...
-
ASP.NETでNAME属性を固定にしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
return trueとreturn falseの用...
-
slickのレスポンシブ > center...
-
フォームの入力チェックをする...
-
チェックボックスの有無判定
-
JavaScriptde途中で、「exit」...
-
COBOLの数字チェック
-
TEXTAREAに入力した改行コード...
-
ラジオボタンのNullチェック
-
Visual Studioのデザインでの非...
-
「本当に削除しますか」が正常...
-
ツリービューのチェックボック...
-
半角英数字のみの入力にエラー...
-
ドロップダウンリストボックス...
-
未入力のラジオボタンに、alert...
-
入力された日付の正規表現の仕...
-
JSのみで入力→確認→メールで送...
-
分岐数といえば
-
度胸試しのJavaScript
-
ドラッグ&ドロップ禁止について
-
Tabキーでのカーソルの移動...
おすすめ情報