PHPのNOW()関数

2010年01月04日に質問されました。  ·  閲覧回数 1.6M回  ·  ソース

MoeAmine picture
2010年01月04日

MySQL関数NOW()と同じ形式で日付と時刻を返すPHP関数はありますか?

date()を使ってそれを行う方法を知っていますが、これだけの関数があるかどうか尋ねています。

たとえば、次のように返します。

2009-12-01 00:00:00

回答

troelskn picture
2010年01月04日
1074

日付機能以外:

date("Y-m-d H:i:s");
hsz picture
2010年01月04日
156
date('Y-m-d H:i:s')

詳細については、こちらをご覧ください: http

vascowhite picture
2013年06月13日
113

PHPバージョン> = 5.4の場合、 DateTimeはこれを行うことができます:-

echo (new \DateTime())->format('Y-m-d H:i:s');

それが機能しているのを

user1786647 picture
2013年02月02日
38

この関数を使用します:

function getDatetimeNow() {
    $tz_object = new DateTimeZone('Brazil/East');
    //date_default_timezone_set('Brazil/East');

    $datetime = new DateTime();
    $datetime->setTimezone($tz_object);
    return $datetime->format('Y\-m\-d\ h:i:s');
}
Julian picture
2016年11月08日
30

簡潔な答え

$now = date_create()->format('Y-m-d H:i:s');

長い答えについては、以下をお読みください。




PHPでのMySQLNOW()関数の模倣

これは、MySQL NOW()関数を模倣するPHPの方法のリストです。

// relative date
$now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher  
$now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2
$now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!!
$now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher   
$now = date('Y-m-d H:i:s'); // Slightly higher performance, but less usable for date/time manipulations

// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,  
// and if you try to invoke format() on a FALSE then you'll get a: 
//     Fatal error: Call to a member function format() on boolean 
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);

date_create()->format('Y-m-d H:i:s')が最良の方法だと思います。このアプローチでは、 date('Y-m-d H:i:s')よりも簡単に時間/タイムゾーンの操作を処理でき、php5.2以降で機能するからです。


MySQL NOW()関数

MySQL関数NOW()は、dateTime値を次の形式で提供します: 'YYYY-MM-DD HH:MM:SS' 。 ここを参照してください: https

興味深い事実は、次のクエリを実行することで日時形式を取得できることです: SHOW VARIABLES LIKE 'd%e_format' 、結果は次のようになります。

Variable_name     Value     
date_format       %Y-%m-%d
datetime_format   %Y-%m-%d %H:%i:%s

ここまでの変数は読み取り専用変数です。 したがって、変更することはできません。

MySQLのNOW()関数は、 datetime_format変数からその形式を取得すると思います。




date()の代わりにdate_create()-> format()の利点summary

date_create('now')->format('Y-m-d H:i:s')に対するdate('Y-m-d H:i:s') date_create('now')->format('Y-m-d H:i:s')の有利な事実は次のとおりです。

  • 時間操作の処理が簡単
  • タイムゾーンの処理が簡単
  • おっと

date()の代わりにdate_create()-> format()の欠点

関数date()は、 date_create()->format()よりもわずかに優れたパフォーマンスを発揮します。 以下のベンチマークテストを参照してください。

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14

大文字は、 date()が速いことを示しています。 ただし、テストシナリオを少し変更すると、結果は異なります。 下記参照:

$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
    $a = $dt->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15

DateTimeメソッド: format()は、ここではdate()よりも高速です。




date()の代わりにdate_create()-> format()の利点の詳細

詳細な説明を読んでください。

時間操作の処理が簡単

date_create()は、相対的な日付/時刻形式( nowyesterday+1 day )を受け入れます。次のリンクを参照し

$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

date()は、次のような相対的な日付/時刻形式も受け入れます。

$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
$tomorrow = date('Y-m-d H:i:s', (time() + 86400)); // 86400 seconds = 1 day

タイムゾーンの処理が簡単

タイムゾーンは、その後の使用は問題場合はdate_create()->format()その後、多くの意味がありますdate()ので、 date()で設定されているデフォルトのタイムゾーン使用していますphp.inidate.timezoneディレクティブ。 リンク: http

実行時にタイムゾーンを変更することが可能です。 例:

date_default_timezone_set('Asia/Tokyo');

その欠点は、すべての日付/時刻関数に影響することです。 date_create()->format()timezone_open()と組み合わせて使用​​している場合、この問題は発生しません。

PHPは主要なタイムゾーンをサポートしています。 面白いのは、それが北極圏と南極をサポートしていることです。 Longyearbyenについて聞いたことがありますか? そうでない場合でも、心配しないでください。公式のPHPドキュメントを読むまで私も心配しませんでした。

$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');

サポートされているすべてのタイムゾーンのリストを参照してください: http

おっと

OOPは状態いっぱいのオブジェクトを使用します。 だから私はこのように考えることを好みます:

// Create a DateTime Object. 
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

次に、このように考える:

// Give me a date time string in format 'Y-m-d H:i:s', 
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));

したがって、 date_create()->format()アプローチは、 date()よりも読みやすいと言えます。




date_create()VS new DateTime()

new DateTime()に対するdate_create()の有利な事実は次のとおりです。

  • 名前空間

名前空間

名前空間で作業していて、新しいキーワードでDateTimeオブジェクトを初期化する場合は、次のようにする必要があります。

namespace my_namespace;

// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();

これには何の問題もありませんが、上記の欠点は、人々がバックスラッシュについて散発的に忘れていることです。 date_create()コンストラクター関数を使用することで、名前空間について心配する必要はありません。

$dt = date_create(); // in or not in a namespace it works in both situations




date_create()-> format()の例

配列を埋める必要がある場合は、プロジェクトにこのアプローチを使用します。 このような:

$array = array(
    'name' => 'John',
    'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone
    'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'),
);
streetparade picture
2010年01月04日
27

これを試して:

date("Y-m-d H:i:s");
santi picture
2014年01月22日
20

私は同じ答えを探していた、と私は、この溶液が出ているPHP 5.3以降:

$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
Richard87 picture
2015年07月20日
17

私が使いやすいと思うもう1つの答え:

echo date('c');

// 2015-07-27T00:00:00+02:00

これは、MySQLが使用するISO 8601の日付(PHP 5で追加)です

編集

MySQL 5.7では、デフォルトで日時のタイムゾーンは許可されていません。 SQL_MODE=ALLOW_INVALID_DATESエラーを無効にできます。 詳細については、こちらの回答をご覧ください: httpsただし、これは、データベースに保存するときにタイムゾーンが失われることも意味します。

デフォルトでは、MySQLはシステムのタイムゾーンを使用しますが、PHPが同じタイムゾーンを使用して

つまり、 2015-07-27T00:00:00+02:00をデータベースに挿入すると、 2015-07-27T00:00:00のみが保存されます(ただし、これは正しい現地時間です!)。

時間をPHPに戻すと、

$importedDate = new \DateTime('2015-07-27T00:00:00')

これがデフォルトであるため、自動的に+02:00タイムゾーンであると見なされます。 これを印刷すると、再び正しくなります。

echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

安全のために、サーバーでは常にUTCを使用し、MySQLとPHPで指定してから、日付を表示するときにのみユーザーのロケールに変換します。

date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00
Shriganesh Shintre picture
2015年04月25日
16

MySQL関数NOW()は、現在のタイムスタンプを返します。 私がPHPで見つけた唯一の方法は、次のコードを使用することです。

$curr_timestamp = date('Y-m-d H:i:s');
user669677 picture
2013年11月12日
15

strftime使用します:

strftime("%F %T");
  • %F%Y-%m-%dと同じです。

  • %T%H:%M:%Sと同じです。

これがideoneのデモです。