3

DateTime :: createFromFormatと同じ関数を探していますが、v5.3より古いバージョンのPHPを実行している環境で機能する必要があります。基本的に、Date()関数で使用するような形式を提供する必要があります。次に、その形式に対して文字列を解析/検証し、文字列が正しく形式化されていて有効な日付である場合はタイムスタンプを返す必要があります。

誰かが私がそのようなものを見つけることができる場所を知っていますか、それとも私はそれを自分で書く必要がありますか?

繰り返しますが、これは引数として提供される特定の形式で機能する必要があります。形式は何でもかまいません。したがって、strtotime()を使用できるという保証はありません。

4

5 に答える 5

6

DateTime::createFromFormat特に、date_parse_from_format米国の日付/時刻形式を使用しないユーザー向けにコーディングする開発者からの需要が高かったため、PHP5.3に追加されました。


その前に、使用していた形式を解析するための特定の関数を開発する必要がありました。PHP <5.3の場合、一般的に行われることは次のとおりです。

  • アプリケーションが受け入れる形式を決定します
  • 「入力はJJ/MM / AAAAである必要があります」 (DD / MM / YYYYのフランス語)などのメッセージを表示します。
  • そのフォーマットに関して、入力がOKであることを確認してください
  • そして、それを解析して、PHPが理解できる日付/時刻に変換します。

つまり、各形式は1つの異なる追加の検証+解析機能を意味するため、アプリケーションと開発者は通常、それほど多くの形式を許可しませんでした。


可能な形式を可能にするその種の関数が本当に必要な場合は、自分で作成する必要があるのではないかと思います:-(

date_parse_from_formatCコードを理解していれば、のソースを調べると役立つかもしれません。それは-のようなものでなければなりませんが、それほど単純ではないようです:で定義されている関数をext/date/php_date.c呼び出しており、それほどフレンドリーに見えません^^timelib_parse_from_formatext/data/lib/parse_date.c

于 2010-02-22T18:26:24.133 に答える
4

Zend FrameworkのZend_Dateクラスを使用できます:http://framework.zend.com/manual/en/zend.date.html

$date = new Zend_Date($string, $format);
$timestamp = $date->get();
于 2010-09-12T01:12:33.297 に答える
3

あなたは使うかもしれませんstrptime()-それはstrftime()フォーマットを使っています。フォーマットとは少し異なりdate()ますが、ほとんど同じことをします。

function createFromFormat($strptimeFormat, $date) {
    $date = strptime($date, $strptimeFormat);
    $date['tm_year'] += 1900;
    $date['tm_mon']++;
    $timestamp = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], $date['tm_mon'], $date['tm_mday'], $date['tm_year']);
    return new DateTime('@'. $timestamp);
}
于 2012-01-10T13:32:19.723 に答える
1

5.3より前のPHPバージョンでは、次の関数を使用して、としてフォーマットされたDateTimeオブジェクトフォーム文字列を取得し'DD.MM.YYYY'ます。

function ParseForDateTimeValue ($strText)
{
    if ($strText != "")
    {
        if (ereg("^([0-9]{1,2})[/\.]\s*([0-9]{1,2})[/\.]\s*([0-9]{2,4})$",$strText,$arr_parts)) {

            $month = ltrim($arr_parts[2], '0');
            $day = ltrim($arr_parts[1], '0');
            $year = $arr_parts[3];

            if (checkdate($month, $day, $year)) {
               return new DateTime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
            }
        }
    }
    return NULL;
}
  • まず、入力が正しいかどうかを検証します。
  • 次に、月、日、年を抽出します
  • checkdateを使用して日付を検証します。
  • それをタイムスタンプに変換し、DateTimeのコンストラクターに渡して返します。
于 2012-08-10T14:55:59.183 に答える
0

を作成し、timestampそれを日付まで実行できます。作成するには、取得した文字列timestampに対していくつかの操作を実行できます。explode

$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
于 2010-02-22T16:40:40.823 に答える