質問

会社のコードベースでこれに遭遇しました。これを、関数だけでmysqlに接続しないものに変更したいと思います。 ジェネラコディセタグプレ

私たちの本番環境は、私の開発環境と同様にUNIXの種類ですが、Windows環境でコードを作成する人もいるため、strptime()はオプションではありません。

同様の質問がSOの周りに浮かんでいるのを見たことがありますが、私のニーズに合った答えはありません。可変形式を使用して文字列から日付を抽出する簡単な、または一般的な方法はありますか?

日付形式が大きく異なる可能性がある理由は、ベンダーからのファイル名を解析しているためです。そのため、yyyymmdd、mmddyyyy、ddmmyyyy、ddmonyyyyなどを処理できる必要があります。

役に立ちましたか?

解決

短い回答は、 all フォーマットを正しく解析する任意の日付フォーマットを自動的に解析する方法がないということです。独自のフォーマットでは、どの日付が増加するかを知る方法はありません。

strtotime()を見ることができます。すべてのベンダーがそれによって認識されたフォーマットを使用する場合は、あなたは運を受けています。しかし、そうでない場合は、本当に"vendor" => "format"のルックアップテーブルを作成してから、 date_parse_from_format()

編集: *下記のコメントに基づいて、これはあなたのニーズに合うDATE_PARSE_FROM_FORMAT()の近似値のPHP4バージョン* です。

function date_parse_from_format($format, $date) {
  $dMask = array('H'=>'hour','i'=>'minute','s'=>'second','y'=>'year','m'=>'month','d'=>'day');
  $format = preg_split('//', $format, -1, PREG_SPLIT_NO_EMPTY);  
  $date = preg_split('//', $date, -1, PREG_SPLIT_NO_EMPTY);  
  foreach ($date as $k => $v) {
    if ($dMask[$format[$k]]) $dt[$dMask[$format[$k]]] .= $v;
  }
  return $dt;
}
.

基本的には、vendor => formatのルックアップテーブルを持つ必要があります。ここで、Formatは日付文字列内の各文字が表すもののマスクです。

注:各日付/時刻単位に使用されているマスクは、PHPの通常の date()文字列形式。簡素化され、カスタム文字列の個々の文字をマスクすることを意味します。

例:

/*
  lookup table for vendors
  for EVERY character you want to count as a date/time 
  increment you must use the following masks:
  hour   : H
  minute : i
  second : s
  year   : y
  month  : m
  day    : d
*/
$vendorDateFormats = array(
  'vendor1' => 'yyyymmdd',
  'vendor2' => 'mmddyyyy',
  'vendor3' => 'ddmmyyyy',
  'vendor4' => 'yyyy.mm.dd HH:ii:ss'
);

// example 1:
echo "<pre>";
print_r(date_parse_from_format($vendorDateFormats['vendor2'],'03232011'));

// example 2:
echo "<pre>";
print_r(date_parse_from_format($vendorDateFormats['vendor4'],'2011.03.23 12:03:00'));
.

出力:

Array
(
    [month] => 03
    [day] => 23
    [year] => 2011
)

Array
(
    [year] => 2011
    [month] => 03
    [day] => 23
    [hour] => 12
    [minute] => 03
    [second] => 00
)
.

他のヒント

ほとんどの文字列を変換するPHP関数strtotime() PHP Ref がありますこれはタイムスタンプの時間(「来週の木曜日」などを含む)ですが、ヨーロッパとアメリカの日付構造(「dd / mm / yyyy」と「mm / dd / yyyy」)を扱う場合は多少混乱する可能性があります。

http://www.functionsで(テストスクリプトを記述せずに)テストできます。-online.com/strtotime.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top