9

日付の形式を含む日付から文字列を取得する方法を知っている人はいますか?

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

私が書いたこの関数を最適化したいので、これを尋ねます。通常、特定のことをせずに、サーバーから別のタイムゾーンの日付を取得します

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

パフォーマンス上の理由から正規表現を避けたいと思っていますが、これが可能かどうかはわかりません

4

5 に答える 5

10

文字列の日付をstrtotimeでタイムスタンプに変換し、タイムスタンプを必要に応じて処理できます。;)

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>
于 2009-12-06T12:49:37.697 に答える
5

私の知る限り、逆方向に作業する保証された方法はありません。最善の方法は、正規表現を予想されるよく知られた形式 ( \d{2,4}[-/]\d{2}[-/]\d{2}「Ymd」など) と照合することですが、正規表現を使用せずに照合を行う簡単な方法は思いつきません。また、解析された形式が理にかなっていることも確認する必要があります。2009 年 3 月 2 日のようなあいまいな日付は09/03/022009-03-0202/03/0903/02/09、または で表される可能性があり09/02/03ます。

于 2009-12-06T12:54:14.077 に答える
4

遅いことはわかっていますが、次のことを行うのが最善でしょうか。

$date = date("Y-m-d");
于 2015-05-05T12:03:39.717 に答える