3

指定された形式を再構築するために何かを書かなくても、日付を特定の精度にフォーマットする方法がすでにあるかどうか、誰かが知っていますか?

たとえば、任意の形式の日付があるが、PHP DateTimeFormat を使用して Ymd H:i:s 形式に変換したいとします (以下の PHP サイトの例を参照)。

    $date = new DateTime('2000-01-01');
    echo $date->format('Y-m-d H:i:s');
    Result: 2000-01-01 00:00:00

私が本当にやりたいことは、元の日付に含まれていない場合、結果に H:i:s 部分を返さないことです。

現時点では、これを行う唯一の方法は、date_parse_from_formatを使用して何が欠けているかを調べ、日付形式 'Ymd H:i:s' で何らかの文字列処理を行って、不要な部分を省略することです(この日付形式は何でもかまいませんので、乱雑な文字列形式です)。

私が見逃した機能がすでにそこにある場合、車輪を再発明したくありません。

タ、ジョー

編集:より明確にするために、日付形式文字列と $date の精度は可変であるため、形式文字列をハードコーディングすることはできず、取得するまで $date の精度はわかりません。

4

5 に答える 5

0

preg_match は、特に探しているものです。

if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)){
   //here do the conversion for "Y-m-d H:i:s"
}else{
   //here do the conversion for "Y-m-d"
}
于 2013-02-21T12:16:53.317 に答える
0

strtotime を使用して、ほぼすべての日付形式をタイムスタンプに変換します。そこから、date() を使用して、必要に応じてフォーマットを設定できます。

詳細については:

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

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

編集:date_parseもあなたが望むものを達成するかもしれません:

http://www.php.net/manual/en/function.date-parse.php

于 2013-02-21T12:44:35.207 に答える
0

これが最も効率的な方法だとは思いませんが、うまくいくようです。また、さまざまなレベルの精度を可能にするために微調整することもできます。(私はY-m-d H:i:sY-m-d H:i、およびを選びY-m-dました。役に立つとは思いませんでしY-m-d Hたが、おそらく が好きかもしれませんY-m-d ha。もしそうなら、それを追加するのは簡単です。)

<?php
// Output dates at arbitrary precision.
header ('Content-Type: text/plain');

$input = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
$date  = new DateTime($input);
echo format_date($date);

function format_date($date) {
    switch ($date->format('s')) {
    case '00':
        switch ($date->format('H')) {
        case '00':
            return $date->format('Y-m-d');
        default:
            return $date->format('Y-m-d H:i');
        }
    default:
        return $date->format('Y-m-d H:i:s');
    }
}

もちろん、これは、その人が実際に正確に真夜中の時刻を望んでいて、明示的にそう言ったという可能性を考慮していません。あなたがその事件をカバーすることがどれほど重要かわかりません。

于 2013-02-21T13:12:12.687 に答える
0

時刻と日付を他の形式ではなく、UNIX タイムスタンプとして保存するのが最善の方法です。

PHPで日付と時刻を処理するクラスを作成しました。使いやすく、非常に便利です

あなたの場合、提供されたセッターを使用して年、月、日、時、分、秒を設定し、パブリック関数を拡張して日付と時刻を期待される形式で取得できます。

<?php
define("NEW_LINE", "</BR>");
class scTimestamp
{
    private $timestamp;
    private $year;
    private $month;
    private $day;
    private $hour;
    private $minute;
    private $second;

    public function __construct() 
    {
        register_shutdown_function(array($this,'__destruct'));
        $this->setTimestamp($_SERVER['REQUEST_TIME']);
    }
    public function __destruct()
    {
        unset($this->timestamp);
        unset($this->year);
        unset($this->month);
        unset($this->day);
        unset($this->hour);
        unset($this->minute);
        unset($this->second);
    }
    private function rebuildTimestampFromDate()
    {
        $this->timestamp=mktime($this->hour,$this->minute,$this->second,$this->month,$this->day,$this->year);
    }
    private function rebuildDateFromTimestamp()
    {
        $this->day=date('j',$this->timestamp);
        $this->month=date('n',$this->timestamp);
        $this->year=date('Y',$this->timestamp);
        $this->hour=date('g',$this->timestamp);
        $this->minute=date('G',$this->timestamp);
        $this->second=date('s',$this->timestamp);       
    }
    public function setTimestamp($tempTimestamp)
    {
        $this->timestamp=$tempTimestamp;     
        $this->rebuildDateFromTimestamp();
    }
    public function getTimestamp()
    {
        return $this->timestamp;    
    }
    public function setYear($tempYear)
    {
        $this->year = $tempYear;
        $this->rebuildTimestampFromDate();
    }
    public function getYear()
    {
        return $this->year;
    }
    public function setMonth($tempMonth)
    {
        $this->month = $tempMonth;
        $this->rebuildTimestampFromDate();
    }
    public function getMonth()
    {
        return $this->month;
    }
    public function setDay($tempDay)
    {
        $this->day=$tempDay;
        $this->rebuildTimestampFromDate();
    }
    public function getDay()
    {
        return $this->day;
    }
    public function setHour($tempHour)
    {
        $this->hour = $tempHour;
        $this->rebuildTimestampFromDate();
    }
    public function getHour()
    {
        return $this->hour;
    }
    public function setMinute($tempMinute)
    {
        $this->minute = $tempMinute;
        $this->rebuildTimestampFromDate();
    }
    public function getMinute()
    {
        return $this->minute;
    }
    public function setSecond($tempSecond)
    {
        $this->second = $tempSecond;
        $this->rebuildTimestampFromDate();
    }
    public function getSecond()
    {
        return $this->second;
    }


    public function getDateDifferenceFromNow()
    {
        return $this->getDateDifferenceFrom($_SERVER['REQUEST_TIME']);
    }
    public function getDateDifferenceFrom($fromDate)
    {
        $return="";
        $sec=" Second";
        $min=" Minute";
        $hrs=" Hour";
        $before=" Before";
        $difference=$fromDate-$this->getTimestamp();
        if($difference<0)
            $return.="In the Future";
        else if($difference<60)
        {
            if($difference>1)
                $sec.="s";
            $return.= $difference.$sec.$before;
        }
        else if($difference<3600)
        {
            $difference=intval($difference/60);
            if($difference>1)
                $min.="s";
            $return.=$difference.$min.$before;
        }
        else if($difference<86400)
        {
            $difference=intval($difference/3600);
            if($difference>1)
                $hrs.="s";
            $return= $difference.$hrs.$before;
        }
        else if($difference<604800)
        {
            $return.= date("l g:i a",$this->getTimestamp());
        }
        else if($difference<28512000)
        {
            $return.= date("F j",$this->getTimestamp());
        }
        else
        {
            $return.= date("F j, Y, g:i a",$this->getTimestamp());
        }
        return $return;
    }
    public function getDateAsString()
    {
        return date("F j, Y",$this->getTimestamp());
    }
    public function getDateTimeAsString()
    {
        return date("F j, Y, g:i a",$this->getTimestamp());
    }


    public function __toString()
    {
        $return = NEW_LINE."^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
        $return.= NEW_LINE." ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^".NEW_LINE;
        $return.= NEW_LINE."@@ Timestamp: ".$this->getTimestamp()." @@".NEW_LINE;
        $return.= NEW_LINE."@@ Date: ".$this->getDateTimeAsString()." @@".NEW_LINE;
        $return.= NEW_LINE." ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^".NEW_LINE;
        return $return;
    }

}
?>

含まれると、次のように使用できます

include_once("scTimestamp.php");
$test=new scTimestamp();

echo $test->getDateAsString();

$test->setTimestamp(1210203200);

echo $test->getDateDifferenceFromNow();

echo $test;

$test->setTimestamp(121020320022);
echo $test->getYear();

echo $test;

そして、結果はこれが好きです。

2015 年 6 月 26 日2008 年 5 月 7 日午後 11 時 33 分 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ @@ タイムスタンプ: 1210203200 @@ @@ 日付: 2008 年 5 月 7 日午後 11 時 33 分 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 5804 ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ タイムスタンプ: 121020320022 @@ @@ 日付: 5804 年 12 月 25 日、午前 3 時 33 分 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

このクラスは必要に応じて使用できます

于 2015-06-26T12:41:29.520 に答える
0

DATE の形式を知っておく必要があると思います。

<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";

$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
于 2013-02-21T12:18:38.243 に答える