いう日付入力のフォームは山ほどあるので、「慣れ」からこれでいいや、という人はいると思いますが、これこそが日付入力における最適解だ!とまでは決して言えないと思うのですよ。完全にマウスしか使われないフォームならまだしも、日付の入力が必要な状況においては同時に住所氏名など他のテキスト入力を伴うケースも多いと予想されます。その状況でプルダウンを持ってくるとキーボードとマウスを行ったり来たりしないといけません。キーボードの矢印キーでプルダウンの上下移動は出来ますが、月だけでも12種、日に至っては31種あります。上記のフォームでは手抜きして西暦を2021~2023年の範囲にしていますが、誕生日の入力フォームで西暦欄がプルダウンだったときの苛立たしさは筆舌に尽くしがたいものがあります。その機能があるからギリギリ我慢できているだけであって、最初からひとつのテキストボックスにしておいたほうが使いやすいとぼくは考えます。コピペもできるし!(大事なことなので2回書きました)誕生日の入力を思い浮かべるとコピペできることの利点がいまいちわかりづらいかもですが、購入日や発送日だったらいかがでしょうか。購入した商品のユーザー登録フォームとか、普通に購入日を入力するケースがあると思います。片方はAmazonの注文履歴、もう片方にメーカーの登録フォームを開き、商品の型番をコピペ。いうケースもありますよね。このとき、購入日がプルダウンだとコピペできなくてイラっとします。type="date"を使おう昔は対応ブラウザが限られていたので避けていたのですが、今やほとんどのブラウザが対応しているtype属性dateがあります。value="2022-01-26">■実行結果これも正直ビミョーではあります。キーボードとマウスのどちらでの入力も可能じゃないか、と一瞬喜んだものの、ブラウザごとにUIが違うというのと、結局コピペは使えないという残念さがあります。それでもまぁ、いちいちJavaScriptで作りこまなくてもカレンダーの表示もしてくれるし、特に直近の日付を入力したい場合(配送日指定とか)では実際便利だと思うんですよ。今後はただのテキストボックスではなく、様子見しながら徐々にtype="date"へ変更していこうかな、と考え中です。人は自由入力欄に日付をどのように書くのかここからが本題です。フロントエンド側がプルダウンだろうと、カレンダー式だろうと日付の入力チェックや、表記の訂正をサーバー側で実施しなければならないことに変わりはありません。2022-02-31等、存在しない日付入れられても困るわけです。.........まぁシステムによっては大して困らんけどもw少し興味があったため、趣味のサイトにおいて日付の入力欄をテキストボックスにしてみて、ユーザーがどんな入力をするのか調べてみました。調査期間は1年ちょっと。対象ユーザー数は2000人くらい。入力件数も2000件程度です。趣味のサイトでの調査なので件数が少ないのはご容赦ください。2022年2月2022/1/12022/01/01202201012022012022_01_012022.01.01'22.01.0122.1/1いやぁ~、バラエティ豊かだし、何よりこれを全て2022年01月01日と認識できる人間の脳みそってすごいなと感心します。人間が見てわかる表記なんだから別に統一する必要はない。それもひとつの考え方ですが、ソート機能を使おうとなると話が変わってきます。これが商品の購入日だったとして、新しい順や古い順に並び変えたい、という需要もあることでしょう。入力は自由でも、実際のデータベースに格納する日付形式は整えなければなりません。サーバーサイド(PHP)で日付の表記ゆれに対応するPHPソースではサクっと表記ゆれを修正するソースをどうぞ。$row[$key_field]));}}$db->commit();解説ソースの最初に設定項目を設けてあり、データベース接続情報はもちろんのこと、対象となるテーブル名やフィールド名も指定できるようにしています。上記の例ではSQLiteのshop.dbにある、ordersテーブルを対象とし、日付の項目名はorder_dateとなっています。各レコードを識別するためのキーはseqという名称ですね。日付の表記ゆれの修正ルールは以下のとおり。形式への変換が完了しました。ソース後半でmktime関数を使っているところがありますが、変換結果が日付的に正しくない場合はエラーを表示するようにしているので、うちより更にカオスな日付入力があったとしても、ちょちょいと修正できることでしょう。まとめ日付入力をプルダウンにすると入力が面倒なのでテキストボックスにして運営していた運営から1年ほど経ってから、その日付でのソート機能が欲しくなり、日付の表記ゆれを修正する必要に迫られた2000件のデータを調査し、日付の表記ゆれを統一するPHPプログラムを書いてみたといったところでしょうか。ほーら、プルダウン入力にしておいたほが楽だったじゃないか~、という声が聞こえてきそうですが、プログラマー側が楽でも入力側は楽じゃないと思うんですよねー。............たぶん。様子を見ようかなーと思っております。こんな細かいことで悩むケースはそんなにないかもですが、たまたまここにたどり着いたどこかのプログラマーさんのお役に立てたなら幸いです。あ、この記事に限りませんが、ぼくが書いたコードは好きに使って頂いて大丈夫です。大したコードは掲載していないので書くまでもないと思っていましたが、「このコード、同人ゲームで使っても良いですか」なんて問い合わせを頂いたこともあるので、一応明言しておきます。関連記事PHPでCookieを保持しつつWebスクレイピングする例PHPを使ったWebスクレイピングといえば5年ほど前に投稿した「PHPでHTMLを簡単に解析できるDOMDocument」でほとんどコト足りていましたし、これでは取得できないページでも「VBScrip02023-10-02INSERT文を一括処理して5万件のデータ追加を12倍高速化するもう半年以上前になりますが、「PHPでSQLiteからMySQLへテーブル構造を変換しデータも移行する例」と題して、SQLiteからMySQLへデータベースを移行するPHPスクリプトを公開/解説しまし02022-10-25PHPのjson_encodeで空白が返ってきてしまう場合のエラー確認方法PHPでJSON形式のデータを作る際によく使うjson_encode関数ではエラー(=変換できない事象)が起こっても空文字が返ってくるだけなので、JSON_THROW_ON_ERRORオプションを付け02022-10-14nginxとFastCGI環境でPHPのob_flushを使う方法PHPでリアルタイムに進捗状況を把握したい時など、文字出力の際に、ob_flush関数を使い、バッファを出力すると思いますが、これが動作する環境としない環境があるんですよね。コメント投稿直後ならコメントの編集/削除が可能です。※24時間経過するか、新しく投稿した場合は古い投稿の編集や削除は出来ません。※ブラウザでCookieが受け入れられない場合はこの機能は使えません。非公開にチェックを入れたコメントは管理人のみ閲覧できます。コメント投稿のガイドライン誰もが閲覧できるコメント欄ですので個人が特定できる情報等は書き込まないようにしましょう。他人のHPやブログの文章を掲載する場合は著作権法第32条「引用」の条件を満たすかご確認ください。誹謗中傷にあたる表現などは場合によっては法的な責任を問われる可能性があるためご注意ください。とっちらか~るTOP。