• ベストアンサー

日付入力欄の表示形式を自動的に「yyyy/mm/dd」形式にしたい。

FORMによる入力ページを作成しているのですが、日付入力の欄に「yyyymmdd」の形式で入力したものをフォーカスが移動した時点で、自動的に「yyyy/mm/dd」の表示形式に変更して表示し、なおかつフォームデータを送信したした時のデータは「yyyymmdd」の形式で送信したいと思っています。(※データベース上はyyyymmddの為) 同様のスクリプトを探してみたのですが、なかなか見つからず困っています。 Javascriptではなく、他の方法でも可能な方法があればそちらでもかまいません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

onFucusとonBlurで整形するといいのでは? もちろん応用で送信するときにyyyymmddにすることは 可能ですが、そもそも「データベース上はyyyymmddの為」 ということはなんのインジェクションもなしにデータ ベースに挿入しようとしていますので、これは問題外。 破壊的なデータを送られてきたらどうするつもりでしょう? 送る側でやってもいいですが、送られてきた側がサーバー上 のプログラムでデータの整合性をみてスラッシュを はずす方が効率的だと思います。 ただ普通はデータベースならDATE型で管理する物なので この手の作業は発生しませんが・・・。 <script type="text/javascript"> function dateFormat(obj,flg){ var str0=obj.value if(flg){ if(str0==""){ return }else if(str0.match(/[0-9]{8}/)){ str1=str0.substring(0,4)+"/"+str0.substring(4,6)+"/"+str0.substring(6,8) obj.value=str1 }else{ alert("8桁の数字を入力してください") obj.value=""; } }else{ str1=str0.split("/").join(""); obj.value=str1 } } </script> <form> <input type="text" size="15" onBlur="dateFormat(this,true)" onFocus="dateFormat(this,false)"> </form>

kodawariha
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおりDB上へ登録する際にはなんらかのチェックが必要ですよね^^;サーバー上のプログラムでチェックするようにしたいと思います。 見た目の問題でユーザーが入力したデータが「yymmdd]のままだと不安がられやしないか?といったところからの発想でこのような要望をあげてみました。誰が入力しても「/」が入れば見た目で納得できるかなぁと・・。 あさはかですが・・。 回答いただいたスクリプトを利用させていただきたいとおもいます。 ありがとうございました。

その他の回答 (1)

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.2

「なおかつフォームデータを送信」するのなら、やはりきちんとした日付チェックが必要です。 >>1さんの数字の桁数だけでは不安です。閏年とか後で面倒なことにもなるし、 「/」で区切るなら、その瞬間を利用すればチェックもそう面倒でないはず。 老婆心ですが。

kodawariha
質問者

お礼

いえいえ、老婆心大歓迎ですよ。 日付のチェックは面倒ですよね。 だからといってはなんですが、どうしても色々な人達が提供してくれている日付チェックのソースに頼ってしまう自分がなさけないです・・・。 サーバー送信無しにそのようなチェックができればなおいいと思っていますので、徐々に変更していこうと思っています。

関連するQ&A

  • DataGridViewでyyyy/MM/dd

    SQLServer2008で作ったデータベースをVB2010のDataGridViewで表示させております。 DataGridViewで日付列を"yyyy/MM/dd"のスラッシュ入り10桁で表示させたいのですが表示されません。 データベース側でのデータ型は「date」となっております。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy/MM/dd" こう記述すればいいと思ったのですが、「20111227」とスラッシュ無しで表示されてしまいます。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy年MM月dd日" これは「2011年12月27日」と表示することを確認できました。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy-MM-dd" これは「2011-12-27」と表示することを確認できました。 どのようにしたら"yyyy/MM/dd"形式で表示させることが出来るのでしょうか 指導のほど、よろしくお願い致します。

  • Excelでセルの表示形式を「yyyy年mm月」から「yyyy/mm/dd」へ

    エクセルで数式をあてはめて6ヶ月後の日にちを「yyyy年mm月」形式で出しているセルがあります。その該当月に作業をしたら、作業日をセルに上書きで入力するのですが、手入力によって「yyyy/mm/dd」形式で入れたいのです。 今、セルの表示形式が「yyyy年mm月」なので、手入力で入れても「yyyy年mm月」としかならず、「yyyy/mm/dd」にするためにセルの書式設定→表示形式の変更を行っている状態です。「yyyy年mm月」形式を解除したいのですが、Delボタンでは入力された数値しかクリアーされず、形式は残ってしまいます。「yyyy年mm月」を解除して「標準」または「yyyy/mm/dd」にもっていく簡単な方法はありますでしょうか?

  • yyyy/mm/ddからyyyy/mmへの変換

    いつもお世話になっております. Excelの第3列の2行目~2027行目までのセルに yyyy/mm/dd と入力されています. dd (日付)を取り除き,yyyy/mm という入力に直したいのですが,方法が分からずに困っております. Sub test() Dim row As Integer For row = 2 To 2027    Sheets("Sheet1").Cells(row, 3).NumberFormat = "yyyy/mm" Next End Sub 上記のようにしてみたのですが,セルの表示形式が変わっただけで, 数式バーの表示を見てみると実質的に dd が残っています. 良い方法をご存知の方がいらっしゃいましたら, ご教示の程どうぞ宜しくお願いいたします.

  • エクセルで日付をyyyy/mm/ddにしたい

    今 A1=S B1=30303 というでーたがあり二つのセルを組み合わせて 最終的にyyyy/mm/ddしたいのです。 ひとまず、S30303にして結合させて、TXTにして エクセルで読み込む際に日付形式にして読み込ませると、日付形式になったのですが、 年の桁数が二桁のものだけはそのままの数字のままで読み込んでしまいます。 他に方法があれば、他のやり方でもいいのですが、 yyyy/mm/ddにするにはどうしたらいいのでしょうか ご教授ください

  • yyyy/m/d h:mmという表記をyyyy/mm/ddにしたい

    エクセルに関する質問です。よろしくお願いします。 シート上でyyyy/m/d h:mm(例えば2009/5/1 3:04や2009/6/15 12:04のように)で表記されている箇所を、時間表記を切って「yyyy/mm/dd」だけにしたいと考えています。 「セルの書式設定」の「表示形式」タブで設定すれば表示上は「yyyy/mm/dd」になるのですが、データ上は「h:mm」が残っています。 そのためピボットテーブルで「yyyy/mm/dd」の情報をベースに、集計しようとすると「h:mm」のデータが邪魔になってしまいます。 何とかなりませんでしょうか? よろしくお願いいたします。

  • 「yyyy/mm/dd hh:mm」が「yyyy/mm/dd hh:nn」へ変化する

    access2003を使用しています。 時刻の「分」の表示形式で気になることがあるのですが テーブルのデザインで フィールド1のデータ型を「日付/時刻型」にし 書式を「yyyy/mm/dd hh:mm」と入力しても 「yyyy/mm/dd hh:nn」に変化してしまいます。 問題なく「2009/02/28 20:33」と表示されるのですが なぜmからnへ変化してしまうのでしょうか? また デザインで書式を「hh:mm」だけ入力した場合は 「時刻 (S)」へ変化します。 何か少しでもわかる方ご回答よろしくお願いします。

  • EXCEL 日付の入力形式

    こんにちは。 日付が、dd/mm/yyyyの形式で入力されたデータをもらいました。 関数を利用したいのでEXCELに日付として認識させたいのですが、 セルの書式設定で設定してもだめなようです。 質問 1)yyyy/mm/ddの形式で入力されていないと日付として認識されないのでしょうか? 2)現在の形式のまま、日付として認識させる方法はありますか? 3)dd/mm/yyyyをyyyy/mm/ddに変換する方法はありますか? 以上、よろしくお願いします。

  • ACCESS日付形式について質問です。

    日付抽出条件を含んだフォームを作成したのですが、午前中までyyyy/mm/ddの形式で入力し、抽出できたのですが、今mm/ddの形式で入力しないと抽出できなくなりました。 変更をした覚えはないのですが・・・ yyyy/mm/ddで抽出できる方法を教えてください。 おねがいします。

  • yyyy/mm/ddの日付に一括変換するマクロ

    [セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。 たとえば、日付データが列Aにある場合にはDATE関数で、 =DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2)) でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。 このためマクロを使用して処理させたいです。 添付のサンプルの例で一括変更するマクロを教えてください。 なお、Excelは2007を使用しています。

  • 「今日の日付を含む」と言う条件のクエリ(yyyy/mm/dd hh:mm形式)

    テーブル1の 日付フィールドには「yyyy/mm/dd hh:mm」形式にしているため 「2009/02/28 0:30」と入力されています。 クエリ1に SELECT テーブル1.日付 FROM テーブル1 WHERE (((テーブル1.日付)=Date())); とした場合は 「2009/02/28 0:30」 は表示されません。 テーブル1の 「2009/02/28 0:30」を「2009/02/28 0:00」にすれば クエリ1を実行すると「2009/02/28 0:00」のレコードが表示されます。 どうすれば日付+時間の場合も日付で抽出することができるのでしょうか? アクセス2003です。 よろしくお願いします。

専門家に質問してみよう