2012-02-02 9 views
1

私は、ユーザーがサーバーに送信される前に自分の日付で入力する可能性のあるWebサイトを持っています。だから私は明らかに彼らが私に与えたものを解析し、それを実際に使用する前に標準フォーマットにする必要があります。だから、私はPHPのstrtotime()関数を使用しました。これは入力として受け入れるものをかなり寛容にしています。PHP strtotime()とdate.js parse()

私はサイト上でdate.jsも使用していますが、parse()関数もかなり良いです。それをサーバーに送信する前にユーザー入力で使用する必要がありますか?どちらがいいですか?

安全のためにバックエンドにstrtotime()を保持しますが、date.jsが良ければ、それをクライアントに追加します。

(明確にするために、私は主にアメリカの日付形式を期待していますが、その変更がすべき、遷移が好ましいことが容易になります何でも。)

+0

複数のユーザー層を対象にしている場合は、英語/アメリカ人は、あなたが2010年2月4日などの日付を処理する方法についても考える - 2月4日、または2月4日? – Adam

+0

date.jsは、フォームがサーバーに送信される前に日付を確認できるようにする必要があります...あなたのケースで使用する方が良いかもしれません。しかし、さらに良いことに、PHPを使ってバックエンドに何らかのチェックを追加するのは悪い考えではありません。 – summea

+0

私はいつもバックエンドでそれをチェックして安全です。しかし、date.jsでの解析がうまくいけば、サーバーに到達する前にそれを前面に追加します。 – Matt

答えて

2

限り、あなたはstrtotime()があなたのニーズを満たしていると感じて、そこではありませんクライアント側でそれを変更する大きな理由です。しかし、strtotime()あなたがの上に滞在する必要がある仮定のカップルを作る:M/D/YまたはDMY形式で

From the strtotime() documentation:

日付は、さまざまなコンポーネント間のセパレータを見て、明確化されています:区切り記号がスラッシュ(/)の場合、アメリカのm/d/yが仮定されます。セパレータがダッシュ( - )またはドット(。)の場合は、ヨーロッパのd-m-y形式が使用されます。

クライアントが選択した任意の形式で日付を送信できるようにしている場合、上記は混乱の原因になる可能性があります。私はちょうど日付と5-1-12をdate.jsでテストしましたが、両方とも2012年5月1日として解析されました。PHPはこの2つを2012年5月1日と2005年1月12日(!!)と解釈します。

echo date("Y-M-n", strtotime("5/1/12")); 
// 2012-May-5 
echo date("Y-M-n", strtotime("5-1-12")); 
// 2005-Jan-1 (whoops!) 

ただし、事前に書式設定しておけば、入力した日付が有効であるという明白な利点があります。 strtotime()をバックエンドに置くことで、要求を送信するためにJavaScript対応のクライアントが不要になります。あなたのPHPは依然としてWebサービスなどと呼ばれ、クライアントはWebブラウザでなくてもかまいません。

+0

それはフォーマットに関する良い点です。ほとんどのユーザーは、日付ピッカーをクリックしてそこを選択するだけで、問題を回避できます。しかし、私は入力するのが好きな人たちのためにできる限り多くのケースをキャッチしたい。 – Matt

0

両方。

1人以上のユーザーがJavaScriptを無効にしている可能性があるため、PHPで日付を検証する必要があります。

入力コントロールに日付を入力し、onblurハンドラで検証し、検証済みの日付をコントロールに書き戻すことができるので、Javascriptの検証が便利です。したがって、ユーザーが生年月日2/5/01を入力してコントロールを残した後、日付は2001年5月2日に変更され、日付が正しく解釈されるだけでなく、strtotime()も明白な値を取得します。

また、UXの観点から、より良い検証フィードバックを使用することもできます。 Javascriptは次のことを行うことができます(これはおそらくよく知られていますが、それを見つけるためには少しの時間がかかりました)。生年月日は年齢が誕生の入力した日付から計算された変数、および今日の日付である

document.getElementById("DobReply").innerHTML = "Current age is "+age; 

を行うことができます次に

<div id="DobReply"></div>; 

検証関数のように、ページ内の要素を入れてください。ユーザーがコントロールから離れると、計算された年齢がポップアップし、ユーザーが現在の年を入力した場合(発生した場合)、すぐにエラーが検出される可能性があります。

だから私はdatejs検証も取り除かないでしょう。しかし、Javascriptが無効になっていると、このすべてが失われます。無効な日付や奇妙な形式の日付などを取得することができます。だから1つしか持てない場合は、strtotime()のままにしておいてください。