2017-04-27 10 views
0

HTML5 type="date"フィールドにWebフォームのユーザー入力があります。この入力された値(他のものと共に)は、JSON文書としてMySQLデータベースに保存されます。今私はその日付を抽出し、1つの与えられたフォーマットで生成されたMS Word文書に印刷する必要があります。すばらしいです!しかし、あなたが知っているように、HTML5の日付フィールドは、ユーザーのロケールや設定などに応じて日付形式を受け入れます。異なるブラウザに入力されたすべての日付が "Y-m-d"形式でDBに保存されています。これは本当にすべての場合にそうですか?将来の使用のためにこのフォーマットに頼ることができますか?トピックに関する仕様情報が見つかりませんでした。 "Y-m-d"形式に依存している場合は、 "推測"日付形式のPHPライブラリはありますか?PHPを使用した日付のフォーマットを推測する

答えて

1

まず、より適切なドキュメントデータベース(MongoDBなど)ではなく、JSONドキュメントをMySQLデータベースに保存する理由を教えてください。

とにかく、thisthisに基づいて、表示される日付の形式は実際の値とは異なります。 HTTPリクエストの日付の値は常にyyyy-mm-ddという形式になります。これはISO 8601の形式であり、信頼できるものでなければなりません。

PHPでは、DateTimeクラスで日付文字列を処理できます。このクラスは、さまざまな日付形式をサポートしています。たとえば:日付文字列が間違っている場合

// timezone is set based on your system preferences if not set 
$date1 = new DateTime('2017-04-27', new DateTimeZone('+00:00')); 
$date2 = new DateTime('27 April 2017', new DateTimeZone('+00:00')); 
$date3 = new DateTime('2017-04-27T00:00:00+00:00'); 

var_dump($date1 == $date2); // bool(true) 
var_dump($date1 == $date3); // bool(true) 

、例外がスローされます。

try { 
    $date = new DateTime('2017 4 27'); 
} catch (Exception $e) { 
    echo $e->getMessage(); // DateTime::__construct(): Failed to parse time string (2017 4 27) at position 5 (4): Unexpected character 
} 

だから、あなたのケースであなたができるあなたの日付の検証のために、適切な出力フォーマット、例えばよりも、このクラスは:

$dateString = '2017-04-27T14:22:11+00:00'; 
try { 
    $date = new DateTime($dateString); 
    echo $date->format('Y-m-d'); // 2017-04-27 
} catch (Exception $e) { 
    // do something else 
} 
+0

ありがとう、ルーカス、MDNとGoogleデベロッパーを指しています。私は自分で答えを見つけるにはあまりにも少しgoogledように見えます。最も重要な部分は、リクエストは常にyyyy-mm-dd形式で送信されることです。 – erop

+0

私のアプリケーション全体はMySQLに依存しています。しかし、ハードコピーの文書属性を入力するための動的なフォームを作成する必要があります。 MySQL 5.7.6で開始された新しいJSON型フィールドは、アプリの機能を拡張するのに非常に役立ちます。 – erop

関連する問題