-2

どのようにフォーマットできますか

12/4/2012 to 20120412

4/11/2012 to 20121104

また

5/4/2012 to 20120405

phpを使用していますか?

私は使用してstrtotime()おり、

$date = new DateTime('4/11/2012');
$date = $date->format('Ymd');

しかし、それらはすべて失敗します.phpにこれを解決する関数はありますか? または、正規表現のようなものを使用する必要がありますか?

4

4 に答える 4

2

のドキュメントを読むと、日付が形式または形式strtotime()であるかどうかについて仮定していることがわかります。dd mm yyyymm dd yyyy

つまり、文字列にセパレータとしてハイフンが含まれているかスラッシュが含まれているかによって、仮定が変わります。残念ながら、ハイフンとスラッシュの両方が両方のフォーマットを書いている人々によって使用されているため、strtotime().

このため、どちらのフォーマットも理想的ではありません。2 つのあいまいさのためです。最良のオプションは、あいまいさの少ない形式で日付をプログラムに提供することです。

を呼び出す前に、入力文字列に対して文字列置換を実行して、セパレータを期待される形式に設定できますstrtotime()。素晴らしい解決策ではありませんが、うまくいきます。

入力形式を変更できない場合、および受信する形式が確実にわかっている場合は、 のDateTime::createFromFormat代わりに [ ] メソッドを使用できますstrtotime()。これは日付文字列を解析します strtotime()が、特定のフォーマット文字列を取るため、期待しているものを正確に伝えることができ、あいまいさがなくなります。

それが役立つことを願っています。

于 2012-06-03T19:29:00.310 に答える
1

これはうまくいくはずです:

function x($string) {
    $array = explode('/', $string);
    $a = $array[0];
    $b = $array[1];
    $c = $array[2];
    if (( (int)$a - 10) < 0) { $a = "0$a"; }
    if (( (int)$b - 10) < 0) { $b = "0$a"; }
    return "{$c}{$b}{$a}";
}
于 2012-06-03T19:32:14.097 に答える
0

日付の例はすべてあいまいであり、DMYまたはMDY日付のいずれかである可能性があります。日付を自分で解析する必要があります。

list($d, $m, $y) = explode('/', $date);
// compose your output from $d, $m and $y
于 2012-06-03T19:14:47.227 に答える
0
$dateTime = strtotime('12/4/2012');
$output   = date('Ymd',$dateTime); 

http://php.net/manual/en/function.date.php

于 2012-06-03T19:17:54.347 に答える