如何在 PHP 中获取当前日期和时间?

How do I get the current date and time in PHP?

提问人: 提问时间:1/23/2009 最后编辑:Peter Mortensen 更新时间:11/21/2023 访问量:3126317

问:

哪个PHP函数可以返回当前日期/时间?

php 日期时间

评论

13赞 I am the Most Stupid Person 4/6/2018
顶级域名;$date = date('m/d/Y h:i:s a', time());
2赞 Rana Nadeem 6/12/2020
看起来除了使用 JavaScript 之外,我们无法获得访问该站点的系统的时间。对于 PHP,我们可以设置一个固定的时区来获取该区域的当前时间。
0赞 AmigoJack 1/3/2023
@RanaNadeem PHP 也无需任何 Web 上下文即可工作,因此“访问站点”(最好是:请求资源)并不能保证发生事件。此外,不能保证请求直接来自设备 - 您可以与代理或服务器和最终用户之间的其他层进行通信。HTTP 不知道任何标头(和原因)来自动发送包含客户端时间(和区域)的请求标头

答:

75赞 Gumbo 1/23/2009 #1

您可以使用 $_SERVER['REQUEST_TIME'] 变量(从 PHP 5.1.0 开始可用)或 time() 函数来获取当前的 Unix 时间戳。

评论

2赞 ban-geoengineering 7/16/2014
值得注意的是,该函数返回的时间戳与时区无关。(所以之前打电话是没有效果的。time()date_default_timezone_set("your-particular-timezone");
0赞 Neal Davis 1/24/2018
@ban-地球工程 - 不确定“独立于时区”是什么意思;它“取决于”服务器设置到的时区?您可以将东海岸的服务器设置为西海岸的时区,反之亦然。
78赞 Rob Hruska 1/23/2009 #2

PHP 的 time() 返回当前的 Unix 时间戳。有了这个,您可以使用 date() 函数根据您的需要对其进行格式化。

$date = date('Format String', time());

正如保罗在评论中提到的,第二个论点是多余的。以下代码片段等同于上面的代码片段:

$date = date('Format String');

评论

18赞 Paolo Bergantino 7/7/2009
如果留空,则假定 date 函数的第 2 个参数为 time()。
67赞 Grizzly Peak Software 1/23/2009 #3

您可以同时使用 $_SERVER['REQUEST_TIME'] 变量或 time() 函数。这两者都返回一个 Unix 时间戳。

大多数情况下,这两种解决方案将产生完全相同的 Unix 时间戳。它们之间的区别在于,返回最近服务器请求的时间戳并返回当前时间。这可能会在精度上产生细微的差异,具体取决于您的应用,但在大多数情况下,这两种解决方案都应该足够了。$_SERVER['REQUEST_TIME']time()

根据上面的示例代码,一旦获得 Unix 时间戳,您将需要格式化此信息。未格式化的 Unix 时间如下所示:1232659628

因此,为了获得有效的东西,您可以使用 date() 函数来格式化它。

PHP手册中提供了有关使用该功能的方法的良好参考。date()

例如,以下代码返回如下所示的日期:01/22/2009 04:35:00 pm

echo date("m/d/Y h:i:s a", time());

评论

0赞 Pacerier 3/19/2015
不同的 Web 服务器如何处理?$_SERVER['REQUEST_TIME']
0赞 Kellen Stuart 7/15/2017
最好的答案是放下手。您甚至可以添加如何从UNIX时间戳到普通人的日期,这是非常值得赞赏的
29赞 Mike 1/23/2009 #4

用:

$date = date('m/d/Y h:i:s a', time());

它有效。

评论

0赞 1/23/2009
我的意思是,当我在太平洋标准时间时,时间又回到了美国东部标准时间......但是为什么?是服务器时间,服务器是 EST 吗?我能为用户争取时间吗?他们的服务器可能是另一个时区,不是吗?
0赞 TravisO 1/23/2009
date 函数是服务器的时间,要么勾选它,要么在运行 date 之前暂时设置它 /w PHP。
0赞 1/23/2009
谢谢,我的服务不能与 php 保持同步,因为 O 适用于 GMT,但不适用于 P 或“e”时区......谢谢!!
0赞 1/23/2009
此$date = date('m/d/Y h:i:s a', time());获取服务器日期,但仍然没有为我获取用户日期。当我在 PST 时,这显示了我在 EST。我想获取用户发送表单的日期,并且像我一样,他们的服务器可能位于不同的时区。
0赞 1/23/2009
其实现在想想,时间不如日期重要。谢谢大家!!
724赞 NJ. 1/23/2009 #5

时间会经过您的服务器时间。一个简单的解决方法是在调用 date() 或 time() 函数之前使用 date_default_timezone_set 手动设置时区。

在澳大利亚墨尔本,所以我有这样的东西:

date_default_timezone_set('Australia/Melbourne');

或者另一个例子是洛杉矶 - 美国

date_default_timezone_set('America/Los_Angeles');

您还可以通过以下方式查看服务器当前所在的时区:

date_default_timezone_get();

所以像这样:

$timezone = date_default_timezone_get();
echo "The current server timezone is: " . $timezone;

因此,对您的问题的简短回答是:

// Change the line below to your timezone!
date_default_timezone_set('Australia/Melbourne');
$date = date('m/d/Y h:i:s a', time());

然后所有时间都将是您刚刚设置的时区:)

评论

119赞 too much php 1/23/2009
对 time() 的调用是多余的,date() 将自动使用当前时间。
14赞 Andrew Magill 2/22/2014
OP从未问过时区。一个更简单、更正确的答案只会显示服务器时间。
52赞 M - 10/9/2014
@AyexeM 我真的很欣赏额外的时区信息。它为我节省了第二次搜索。
7赞 Yousef Altaf 1/5/2015
您可以从此处获取所有时区 时区
18赞 Jamie 2/27/2015
@AyexeM 一个更简单、更正确的答案不是省略可能重要和相关的信息,而是按照你的建议回答问题,但随后提供关于其下时区的其他信息。没有必要仅仅因为没有被要求而省略潜在的关键信息。
642赞 Shadrack Orina 3/6/2012 #6
// Simply:
$date = date('Y-m-d H:i:s');

// Or:
$date = date('Y/m/d H:i:s');

// This would return the date in the following formats respectively:
$date = '2012-03-06 17:33:07';
// Or
$date = '2012/03/06 17:33:07';

/** 
 * This time is based on the default server time zone.
 * If you want the date in a different time zone,
 * say if you come from Nairobi, Kenya like I do, you can set
 * the time zone to Nairobi as shown below.
 */

date_default_timezone_set('Africa/Nairobi');

// Then call the date functions
$date = date('Y-m-d H:i:s');
// Or
$date = date('Y/m/d H:i:s');

// date_default_timezone_set() function is however
// supported by PHP version 5.1.0 or above.

有关时区参考,请参阅支持的时区列表

评论

17赞 dev_willis 11/20/2015
这是一个比上面的答案更直接的答案。谢谢!
1赞 htafoya 12/7/2017
感谢您提供的时区链接,我正准备用谷歌搜索:)
9赞 Bullyen 10/19/2012 #7

我发现在PHP中获取当前时间的最简单方法是这样的。

//Prints out something like 10:00am Just be sure to set your timezone correctly.
date_default_timezone_set("America/Chicago");
$TIME = date('G:ia'); 
13赞 user1642018 12/9/2012 #8
<?php
echo "<b>".date('l\, F jS\, Y ')."</b>";
?>

像这样的印刷品

2012年12月09日星期日

259赞 Mahdi 5/29/2013 #9

从 PHP 开始,你可以使用 DateTime() 类:5.2.0

use \Datetime;

$now = new DateTime();
echo $now->format('Y-m-d H:i:s');    // MySQL datetime format
echo $now->getTimestamp();           // Unix Timestamp -- Since PHP 5.3

并指定:timezone

$now = new DateTime(null, new DateTimeZone('America/New_York'));
$now->setTimezone(new DateTimeZone('Europe/London'));    // Another way
echo $now->getTimezone();
27赞 Kailas 6/7/2013 #10
 $date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
 echo $date->format('d-m-Y H:i:s');

更新

 //Also get am/pm in datetime:
 echo $date->format('d-m-Y H:i:s a'); // output 30-12-2013 10:16:15 am

对于日期格式,PHP date() 函数很有用。

117赞 ShapCyber 8/30/2013 #11

参考资料:这里有一个链接

这比简单地将一天或一个月中的秒数加减到时间戳更可靠,因为夏令时。

PHP代码

// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
15赞 David 9/26/2013 #12

根据文章 如何使用 PHP 获取当前日期时间 (NOW),有两种常见的方法可以获取当前日期。要使用 PHP 获取当前日期时间(现在),您可以将该类与任何 PHP 版本一起使用,或者最好将该类与 PHP >= 5.2 一起使用。datedatetime

此处提供了各种日期格式表达式。

使用日期的示例

此表达式将以 格式返回 NOW。Y-m-d H:i:s

<?php
    echo date('Y-m-d H:i:s');
?>

使用 datetime 类的示例

此表达式将以 格式返回 NOW。Y-m-d H:i:s

<?php
    $dt = new DateTime();
    echo $dt->format('Y-m-d H:i:s');
?>
10赞 JayminLimbachiya 2/1/2014 #13

如果您想要不同的时间表,请使用:

$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);

date_default_timezone_set("Asia/Calcutta");
echo date("Y/m/d H:i:s");

评论

0赞 Peter Mortensen 2/2/2014
你说的“时间尺度”是什么意思?
0赞 Saneem 3/11/2014
“时区”,可能。
2赞 5/5/2014
我相信@Jaymin可能意味着如果你想调整一天前的时间,后退一个月,等等。
11赞 kkarayat 4/11/2014 #14

设置时区:

date_default_timezone_set('Asia/Calcutta');

然后调用日期函数

$date = date('Y-m-d H:i:s');
10赞 Dariusz J #15
date_default_timezone_set('Europe/Warsaw');
echo("<p class='time'>".date('H:i:s')."</p>");
echo("<p class='date'>".date('d/m/Y')."</p>");
47赞 Subodh Ghulaxe 4/17/2015 #16

PHP 的 date 函数可以完成这项工作。

日期()

描述:

string date(string $format [, int $timestamp = time()])

返回一个字符串,该字符串使用给定的整数时间戳或当前时间(如果未给出时间戳)返回根据给定格式字符串格式化的字符串。

例子:

$today = date("F j, Y, g:i a");               // March 10, 2001, 5:16 pm
$today = date("m.d.y");                       // 03.10.01
$today = date("j, n, Y");                     // 10, 3, 2001
$today = date("Ymd");                         // 20010310
$today = date('h-i-s, j-m-y, it is w Day');   // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y");             // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');   // 17:03:18 m is month
$today = date("H:i:s");                       // 17:16:18
$today = date("Y-m-d H:i:s");                 // 2001-03-10 17:16:18 (the MySQL DATETIME format)
11赞 Joomler 3/14/2016 #17
date(format, timestamp)

该函数返回一个字符串,该字符串使用给定的整数时间戳或当前时间(如果未给出时间戳)返回根据给定格式字符串格式化的字符串。换句话说,是可选的,默认为 time() 的值。datetimestamp

参数是 -

format - 必需。指定时间戳的格式

timestamp -(可选)指定时间戳。默认值为当前日期和时间

如何获得一个简单的约会

函数的必需格式参数指定如何格式化 .date()date (or time)

以下是一些通常用于日期的字符:

  1. d - 表示月份中的某一天(01 到 31)
  2. m - 表示一个月(01 到 12)
  3. Y - 表示年份(四位数字)
  4. l (小写字母 'L') - 表示星期几

其他字符(如)也可以插入到字符之间以添加其他格式。"/", ".", or "-"

下面的示例以三种不同的方式设置当前日期的格式:

<?php
    echo "Today is " . date("Y/m/d") . "<br>";
    echo "Today is " . date("Y.m.d") . "<br>";
    echo "Today is " . date("Y-m-d") . "<br>";
    echo "Today is " . date("l");
?>

一些有用的链接

16赞 Kalaivani M 10/12/2016 #18

您也可以使用此格式:

$date = date("d-m-Y");

$date = date("Y-m-d H:i:s");
14赞 Hardik Kalathiya 1/19/2017 #19
<?php
// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
?>
8赞 rtroulak 1/26/2017 #20

另一种简单的方法是获取当前日期和时间的时间戳。使用 mktime() 函数:

$now = mktime(); // Return timestamp of the current time

然后,您可以将其转换为另一种日期格式:

//// Prints something like: Thursday 26th of January 2017 01:12:36 PM
echo date('l jS \of F Y h:i:s A',$now);

更多日期格式在这里: http://php.net/manual/en/function.date.php

6赞 A.A Noman 3/15/2017 #21

如果你是孟加拉人,如果你想得到达卡的时间,那么就用这个:

$date = new DateTime();
$date->setTimeZone(new DateTimeZone("Asia/Dhaka"));
$get_datetime = $date->format('d.m.Y H:i:s');
28赞 Juned Ansari 3/18/2017 #22

它非常简单

echo $date = date('Y-m-d H:i:s');

18赞 Naeem Moavia Siddiqui 3/28/2017 #23
echo date("d-m-Y H:i:sa");

此代码将获取运行代码的服务器的日期和时间。

评论

1赞 MattWithoos 7/9/2017
对误导性答案投了反对票。不,它不会获取本地计算机的时间,除非您也在本地运行服务器。它将获取服务器的日期和时间。
0赞 Neal Davis 1/24/2018
@MattWithoos - “此代码将获得”服务器“的日期和时间,他没有说你所说的”本地机器”。您也不必在“本地”运行服务器 - 您可以在世界任何地方将服务器设置为您想要的任何时区。你的反对票是大错特错的,没有理由
1赞 MattWithoos 1/25/2018
@NealDavis 你有没有想过看编辑?我发布了该评论,建议对不正确的信息进行编辑,同时等待批准。现在它已获得批准并显示正确的信息。
1赞 MattWithoos 1/25/2018
@NealDavis 此外,如果您费心阅读原始帖子,它从字面上说“此代码将获取本地计算机 (PC) 的日期和时间”。这完全是误导。
11赞 hector teran 4/14/2017 #24

日期格式也取决于:

echo date("d/m/Y H:i:sa"); // 13/04/2017 19:38:15pm

评论

0赞 Peter Mortensen 2/23/2019
这很难理解。你能详细说明一下吗?
10赞 RichestSoft 6/19/2017 #25

您可以使用以下代码:

<?php
    $currentDateTime = date('Y-m-d H:i:s');
    echo $currentDateTime;
?>
8赞 Ashok 3/14/2018 #26

获取当前时间和日期的最佳方法是通过 PHP 中的 date 函数

$date = date('FORMAT'); // FORMAT E.g.: Y-m-d H:i:s

$current_date = date('Y-m-d H:i:s');

使用 Unix 时间戳:

$now_date = date('FORMAT', time()); // FORMAT Eg : Y-m-d H:i:s

要设置服务器时区,请执行以下操作:

date_default_timezone_set('Asia/Calcutta');

此处是不同的时区列表。

6赞 Meena Arumugam 7/3/2018 #27

通常,这个日期函数对每个人都有用:date(“Y/m/d”);

但时间是不同的,因为时间函数取决于 PHP 版本或系统日期。

所以可以这样使用它来获得我们自己的时区:

$date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
echo $date->format('H:m:s');

此功能显示 24 小时时间。

评论

0赞 zEn feeLo 3/25/2019
它为我设定了 1970 年的日期!
11赞 Kowsigan Atsayam 4/1/2019 #28

很简单

date_default_timezone_set('Asia/Kolkata');
$date = date('m/d/Y H:i:s', time());

评论

0赞 Kowsigan Atsayam 4/3/2019
我没见过。
33赞 Supun Praneeth 6/16/2019 #29

对于新的PHP程序员来说,他们可能会混淆为什么有很多方法可以获取当前日期和时间,以及在他们的项目中使用哪一个。

1. date 方法(PHP 4、PHP 5、PHP 7)

这是在 php 中获取日期和时间的非常常见且非常简单的方法。

// set the default timezone to use. Available since PHP 5.1
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

/* use the constants in the format parameter */
// prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// prints something like: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

你可以在这里了解更多信息

2. DateTime (PHP 5 >= 5.2.0, PHP 7)

当您想将 PHP 与 OOP 一起使用时,这是获取日期和时间的最佳方式。

<?php
// Specified date/time in your computer's time zone.
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Specified date/time in the specified time zone.
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in your computer's time zone.
$date = new DateTime();
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Using a UNIX timestamp.  Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

你可以在这里了解更多信息

3. 碳日期时间套餐

如果您使用的是 ComposerLaravelSymfony 或任何类型的框架,这是获取日期和时间的最佳方式。此外,这个包扩展了 php 中的 DateTime 类,因此您可以使用 Datetime 类中的所有方法。 这是内置的框架,如 laravel,因此您不必单独安装它。

printf("Right now is %s", Carbon::now()->toDateTimeString());
printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); // automatically converted to string
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();

// Carbon embed 823 languages:
echo $tomorrow->locale('fr')->isoFormat('dddd, MMMM Do YYYY, h:mm');
echo $tomorrow->locale('ar')->isoFormat('dddd, MMMM Do YYYY, h:mm');

$officialDate = Carbon::now()->toRfc2822String();

$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;

$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');

$internetWillBlowUpOn = Carbon::create(2038, 01, 19, 3, 14, 7, 'GMT');

if (Carbon::now()->isWeekend()) {
    echo 'Party!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'

你可以在这里了解更多信息

希望这会有所帮助,如果您知道任何其他获取日期和时间的方法,请随时编辑答案。

评论

0赞 s3c 4/29/2020
我喜欢其他一些答案,这些答案显示了如何使用自定义文本格式化字符串,或者让我们说哪种格式最适合 MySQL 等,但我肯定会接受这个答案,因为它显示了所有三种类型和用法:过程、面向对象和 OOP 框架。
1赞 Supun Praneeth 4/29/2020
@s3c我本可以回答类似问题,但问题是“我如何在PHP中获取当前日期和时间?”,我们的主要关注点应该放在这个问题上。:)
8赞 CodAIK 1/4/2022 #30

您所在的国家/地区时区:支持的时区列表

date_default_timezone_set('Asia/Kolkata');

$dateYmd = date('Y-m-d');
echo "Current Year Month Day: $dateYmd";

当前年份 月 日: 2022-01-03

$datehms = date('h:i:s');
echo "Current Hour Minute Second: $datehms";

当前小时 分秒: 11:05:38