2009-08-01 19 views
3

これは、フロントエンドのユーザビリティとPHP DATE_TIMEの検証の点で2つの質問です。PHPフォームでカスタムdatetimeを入力して検証する最も良い方法

私はプロジェクトを完了した日付を追加したいクライアントのためのサイトで作業しています(プロジェクトをその順序でリストすることができます)。管理インターフェースを使っているのは唯一の人なので、できるだけシンプルにしたいと思っています。

私はSQLite dbに日付をDATE_TIMEとして保存しています。

私はとしたいと思っています。クライアントに少なくとも年月を入力する必要があります().DATE_TIMEに日、時間、分、秒を追加するオプションがあります。これらが設定されていない場合、デフォルトの最小値に設定されます。

これを行う最も簡単な方法は、入力(左)と結果(右)を1つの入力フォームにすることでした。 彼はフォーマットとしてxxxx/xx/xx/xx/xx/xxを使用させる。

2009/08  = 2009-08-01 00:00:01 
2009/08/01 = 2009-08-01 00:00:01 
2009/08/01/05 = 2009-08-01 05:00:01 

(デフォルトとして1秒追加それ以外の場合は、前日になり)

Iは、配列への入力を爆発し、正規表現を用いて、各日付の部分を検証することによって最初に試み。それは本当に厄介で、私は予想通りに動作しない、[1980-2009] /または/ [01-12] /という適切な範囲を検証する方法を理解することができません。また/ [(0-9){2}] /は明らかに月にはうまくいきません。

別のオプションは、各日付セクションを別々の選択フィールドにすることです。月後の各フィールドをオプションにする。しかし、それは、毎月31日を持っていないので、私は何月が選択されているに応じて日のフィールドを変更するにはいくつかのjavascriptが必要になることを考えると、HTML出力で乱雑になります。それはあまりにも多い。また、単一のフィールドを使用する方がはるかに簡単で高速です。

カスタムの日付時刻を入力して検証するにはどうすればよいですか?

答えて

7

私は、月、年、日/月/年、日/月/年の時間:分、年の月を含むさまざまな日付形式を入力できるように、日付にstrtotime()を呼び出すことをおすすめします日時:分

strtotimeが日付を判別できない場合は、falseを返します(古いバージョンのPHPでは-1、マニュアルをチェックしてください)。 SOあなたの一般的なコードは次のようになります。

  1. 実行にstripslashesを介して入力(もし必要)とのstrtotime
  2. チェック値は=== falseの場合。ヨールデータベースはこれだけですdate()
+0

を使用している期待してそうであれば、表示エラー

  • それ以外の場合は、時間をフォーマット!ありがとう。少年ははるかに簡単です。 – user73119

  • +0

    ちょうどちょうど年/月を取るように見えるのではない... meh、私は彼もまた1日を入力させます。その機能に大きな柔軟性!それを指摘してくれてありがとう! – user73119

    +0

    あなたは正しい - 私は間違っていた。スラッシュ(つまり8/1)が1つの場合、関数はその月/日(/現在の年)を仮定します – Josh

    関連する問題