フォームから日付を入力して
過去日なら、一年プラスしています。
例えば12月15日に1月1日と入力すると
2022年1月1日ではなく、2023年1月1日となるのですが
例外があって、年も一緒に入力した場合は、一年プラスしたくないのですが、どんな方法があるでしょうか?
例えば、今年5月入力で
年を付け加えて、2022年4月1日と入力すると
現状だと2023年4月1日になります。
これが、ちゃんと2022で反映させるには、何かいい方法はありますか?
【現状】具体的なコードはここでは書き出さない環境で申し訳ないのですが
1,フォームに日付入力して、ボタンを押して
input_date.value をisdateで日付かどうか確認
2, input_date.valueが日付なら、cdateで、日付型に変換
3,dateとinput_date.valueをifで、過去日かどうかを判定
4,過去日ならdateserialで一年プラスする
具体的なコードではなく、これを使えばいいみたいな
ヒントをいただけたら、助かります。
No.1ベストアンサー
- 回答日時:
こんにちは
現状がどうなっているのかわかりませんけれど、フォームのテキストボックス等への入力であるものと想像しました。
自動変換で日付型に読み替えてしまった後で判断するのは難しいと思います。
入力値は、基本的には文字列なので、入力フォーマットが決まっているなら(=スラッシュ区切り等)それで分割して、値が3個あれば年も入力、2個なら年の入力無しと判定できるのでは?
自由入力を許すのなら(=○○年〇月〇日など)、数字を半角アラビア数字と仮定してよければ、数字の連続を抽出し、上記同様に3個あれば年も入力と判断。
全角数字や漢数字も許容しているのなら、まず、半角数字に置き換えてから、上記の判定を行うとか。
和歴の年号に関しても同様と思います。
No.6
- 回答日時:
日付が2022/5/3 又は 5/3のように、入力される前提です。
1,フォームに日付入力して、ボタンを押して
input_date.value をisdateで日付かどうか確認
2, input_date.valueが日付なら以下の処理をする。
①日付を/で分割する。
②分割結果が3つの要素なら以下の処理なし。
分割結果が2つの要素なら以下の処理をする。
1番目=月、2番目=日と解釈する。
現在日付を取得し、現在(月日)>分割された月日なら、input.valueの頭に現在(年)+1を付加する。
現在(月日)=<分割された月日なら、input.valueの頭に現在(年)を付加する。
③input_date.valueをcdateで、日付型に変換
以上で完了です。
No.5
- 回答日時:
私ならそもそも年も入力してもらいます。
ユーザー視点から言えば、ブラックボックスな内部処理で年が変更されてしまうのは仕様として好ましくなく思います。
keydown, change イベントを使って独自の入力規則をコーディングするかな。
No.4
- 回答日時:
入力する文字列は、日付が4月1日なら
4/1 もしくは、2022/4/1
のようにする前提です。
>2, input_date.valueが日付なら、cdateで、日付型に変換
これを行う前に、//が2つなら年が入力されて、/が1つなら年が入力されていない。と判断してはいかがでしょうか。
もし、前提が誤っているなら、具体的にどのような値を入力しているのかを
提示してください。それが判らないと、回答のしようがないです。
ありがとうございます。
文字型入力なので、色んな値がはいってしまいますね。
//か、または、年、月の位置で判断してみようと思います。
No.2
- 回答日時:
No.1(fujinさん)がいってるのは、
>1,フォームに日付入力して、ボタンを押して
>input_date.value をisdateで日付かどうか確認
――のところを、
>1,フォームに日付入力して、ボタンを押して
+ input_date.value like "20*" で西暦始まりか判断(大雑把)
+ 真ならそのままcdate()に変換して終わり。さもなくば、
>input_date.value をisdateで日付かどうか確認
――みたいにしては、ということかと。
>ifで分岐出来ません
isdate使って、ifで分岐しているのでは。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/12/22 17:29
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) excel2016でリストからカレンダーに内容を反映させたいです 2 2022/10/27 15:32
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- Visual Basic(VBA) 【再投稿】VBAのシフト表でバグが出て困っています 3 2022/09/24 08:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックス入力を半角英...
-
フォームの値が0だったら空白...
-
Javascriptが機能せず原因が分...
-
javascriptで入力フォームが空...
-
フッター下部を追従しているコ...
-
VBScriptで未入力のチェック(...
-
onClickとsubmitの処理順序
-
数字の1文字目を消したい
-
HTMLで入力したものを変数で扱...
-
ラジオボタンによるフォームの...
-
submit後、同じ入力欄に戻らせ...
-
イベント発生時に入力待ち状態...
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
【jQuery】input nameの文字列...
-
二つの入力欄に、同時に同じ文...
-
onchangeイベントを強制的に発...
-
<input>の選択肢をプルダウンメ...
-
ボタンかリンクをクリックする...
-
%の計算の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onClickとsubmitの処理順序
-
条件により、リンク先に画面遷...
-
javascriptで入力フォームが空...
-
フォームから入力すると、入力...
-
ラジオボタンによるフォームの...
-
JSPとJavaScriptの連携について...
-
テキストフィールドに入力した...
-
日付入力欄の表示形式を自動的...
-
最初の入力を判断
-
PDFフォームで条件つき金額を表...
-
テキストボックスを無効にする...
-
URLの/以降だけを入力したいです。
-
vbsでフォームに値を入力できない
-
フォームの値が0だったら空白...
-
テキストエリア入力文字数の表...
-
VBScriptで未入力のチェック(...
-
テキストボックス入力を半角英...
-
数字の1文字目を消したい
-
Javascriptが機能せず原因が分...
-
javascriptで入力禁止文字をチ...
おすすめ情報
excel 2016です。
この問題は年を省いても、入力しても
どちらも今年で入力されてしまうので、ifで分岐出来ません