0

次のコードを使用していますが、正常に動作します。

$boosterDate1 = $_POST['boosterDate1'];
//$boosterDate1 = changeDateFormat($boosterDate1);

date_default_timezone_set('America/Chicago');
$myDateTime = new DateTime;
$myDateTime = $myDateTime->createFromFormat('m/d/y', $boosterDate1);
$boosterDate1 = $myDateTime->format('Y-m-d');

私が抱えている問題は、関数を作成し、複数の日付で複数回呼び出そうとするときです。何らかの理由で、次の関数に日付を渡すと、次のエラーが発生します。

致命的なエラー: 非オブジェクトでのメンバー関数 format() の呼び出し

<?php 
function changeDateFormat($dateString){
    date_default_timezone_set('America/Chicago');
    $myDateTime = new DateTime;
    $myDateTime = $myDateTime->createFromFormat('m/d/y', $dateString);
    $newDateString = $myDateTime->format('Y-m-d');
    return $newDateString;
}
?>

どんな助けでも大歓迎です。マニュアルと多くの投稿を調べましたが、日付を関数に渡して日付に同じ書式を設定すると機能しない理由がわかりません。

4

1 に答える 1

0

createFromFormat()staticコンストラクタです。

代わりにこれを使用してください:

$date = DateTime::createFromFormat('m/d/y', $dateString);

また、$_POST['boosterDate1']内容を確認してください。無効な場合は、マニュアルに従って (オブジェクトではなく)をcreateFromFormat()返します。false

新しい DateTime インスタンスを返すか、失敗した場合に FALSE を返します。


テストによる改善された機能:

<?php
header('Content-Type: text/plain; charset=utf-8');

date_default_timezone_set('America/Chicago');

$check = '12/20/14';

function changeDateFormat($dateString){
    $myDateTime = DateTime::createFromFormat('m/d/y', $dateString);
    return $myDateTime->format('Y-m-d');
}

echo changeDateFormat($check);
?>

ショー:

2014-12-20

長い年表記を使用している場合は、 に変更'm/d/y''m/d/Y'ます。エラーの原因となる場合があります。

于 2013-09-22T03:52:33.653 に答える