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


Answers:


622

时间将取决于您的服务器时间。一个简单的解决方法是date_default_timezone_setdate()time()函数调用之前使用来手动设置时区。

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

date_default_timezone_set('Australia/Melbourne');

另一个例子是LA- US

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());

那么所有时间都将是您刚刚设置的时区:)


101
对time()的调用是多余的,date()将自动使用当前时间。
太多的php

11
OP从未询问过时区。一个更简单,更正确的答案将只是显示服务器时间。
AyexeM 2014年

43
@AyexeM我实际上感谢其他时区信息。它为我节省了第二次搜索。
Marquizzo 2014年

5
您可以从此处获取所有时区时区
Yousef Altaf'1

13
@AyexeM一个更简单,更正确的答案不是忽略潜在的重要和相关信息,而是按照您的建议回答问题,然后提供有关其下的时区的其他信息。无需仅由于未要求就忽略潜在的关键信息。
杰米

524
// 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.

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


12
这是比前一个更直接的答案。谢谢!
dev_willis 2015年

1
谢谢您所支持的时区的链接,我正要在Google上搜索它:)
htafoya

190

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

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();

2
这是一个很好的答案,但您忘了告诉我们在调用它之前需要使用\ Datetime :) ty
Amor.o

@ Amor.o谢谢您的注意,我现在更新了答案-尽管有些迟了,老实说我不记得收到关于您的评论的通知。关于Datatime命名空间的使用;我不记得在2013年是否是这种情况,并且多年来我都没有编写任何PHP代码。无论如何,您的建议似乎是正确的,因此再次感谢。
Mahdi

不客气:)
Amor.o

95

参考:这是一个链接

由于夏时制,这比简单地在一天或一个月的时间戳中增加或减去秒数要可靠。

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)

当然最好的〜
佳日库马尔维尔马

67

PHP的time()返回当前的Unix时间戳。这样,您可以使用date()函数将其格式化为所需的格式。

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

正如Paolo在评论中提到的那样,第二个参数是多余的。以下代码段与上面的代码段等效:

$date = date('Format String');

17
如果保留为空,则日期函数的第二个参数假定为time()。
Paolo Bergantino,

66

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


1
值得注意的是,该time()函数返回的时间戳与时区无关。(因此,date_default_timezone_set("your-particular-timezone");在之前致电将没有任何效果。)
禁止地球工程

@ ban-geoengineering-不确定“独立于时区”是什么意思;它“取决于”服务器设置的时区?您可以将东海岸的服务器设置为西海岸的时区,反之亦然。
尼尔·戴维斯

56

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

在大多数情况下,这两种解决方案将产生完全相同的Unix时间戳。两者之间的区别是$_SERVER['REQUEST_TIME']返回最新服务器请求的时间戳并time()返回当前时间。根据您的应用,这可能会导致精度上的细微差别,但是在大多数情况下,这两种解决方案都足够。

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

因此,为了获得可以使用的date()功能,您可以使用函数对其进行格式化。

PHP手册date()中提供了有关使用该函数的方法的很好的参考。

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

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

不同的Web服务器如何处理$_SERVER['REQUEST_TIME']
Pacerier,2015年

最好的答案了。您甚至还添加了如何从UNIX时间戳获取到正常人的日期,这一点非常感谢
Kolob Canyon

45

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)

27
 $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()函数很有用。



25

对于新的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'

您可以在这里了解更多

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


我喜欢一些其他的答案,这些答案显示了即使使用自定义文本也可以格式化字符串,或者说哪种格式最适合MySQL等,但是我肯定会接受这种显示三种类型和用法的方法:过程,面向对象和OOP框架。
s3c

1
@ s3c我本可以回答类似的问题,但问题是“如何获取PHP中的当前日期和时间?”,我们的主要重点应该放在这个问题上。:)
Supun Praneeth,

21

采用:

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

有用。


我的意思是,当我是PST时,时间又回到了EST ...但是为什么呢?是服务器时间,服务器是EST吗?我可以给用户时间吗?他们的服务器可能在另一个时区,不是吗?

date函数是服务器的时间,可以在运行日期之前检查它或将其临时设置为/ w PHP。
TravisO 2009年

谢谢,我的服务不能与php保持最新,因为O适用于GMT,但不适用于P或“ e”时区...谢谢!

这个$ date = date('m / d / Y h:i:s a',time()); 获取服务器日期,但仍然无法获取用户日期。这是我在PST时在EST看到的。我想获取用户发送表单的日期,就像我一样,他们的服务器可能在不同的时区。

实际上,我现在考虑的时间不如日期重要。谢谢大家!!

18
echo date("d-m-Y H:i:sa");

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


1
因误导性答案而被否决。不,除非您也在本地运行服务器,否则它不会占用您本地计算机的时间。它将获取服务器的日期和时间。
MattWithoos

@MattWithoos-“此代码将获取“服务器”的日期和时间,他对您所说的“本地计算机”一无所知。您也不必“本地”运行服务器-您可以拥有一台服务器世界各地任何设置为您想要的任何时区的人,您的不赞成票是完全错误的,没有任何原因
Neal Davis

1
@NealDavis您是否认为要查看编辑?我发表了该评论,建议对不正确的信息进行编辑,与此同时,等待其批准。现在,它已经批准并显示正确的信息。
MattWithoos

1
@NealDavis另外,如果您不愿意阅读原始文章,它的字面意思是“此代码将获取本地计算机(PC)的日期和时间。”。那完全是误导。
MattWithoos

16

您也可以使用此格式:

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

要么

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

14

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

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

使用日期的例子

此表达式现在将以format返回Y-m-d H:i:s

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

使用datetime类的示例

此表达式现在将以format返回Y-m-d H:i:s

<?php
    $dt = new DateTime();
    echo $dt->format('Y-m-d H:i:s');
?>

13
<?php
echo "<b>".date('l\, F jS\, Y ')."</b>";
?>

像这样打印

2012年12月9日,星期日


12
<?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)
?>

11

设置您的时区:

date_default_timezone_set('Asia/Calcutta');

然后调用日期函数

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

11
date(format, timestamp)

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

并且参数是-

格式-必填。指定时间戳的格式

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

如何获得一个简单的约会

date()函数所需的format参数指定如何格式化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");
?>

一些有用的链接


10

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

$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");

您所说的“时间刻度”是什么意思?
彼得·莫滕森

可能是“时区”。
Saneem 2014年

2
我相信,如果要调整提前一天的时间@Jaymin可能意味着,背个月等
只是普通高

10
date_default_timezone_set('Europe/Warsaw');
echo("<p class='time'>".date('H:i:s')."</p>");
echo("<p class='date'>".date('d/m/Y')."</p>");


10

您可以使用以下代码:

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

9

我发现用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'); 

8

另一种简单的方法是获取当前日期和时间的时间戳。使用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
// 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 2016 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

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

/* 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: 2016-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

6

如果您是孟加拉国,并且如果您想获取达卡的时间,则使用此方法:

$date = new DateTime();
$date->setTimeZone(new DateTimeZone("Asia/Dhaka"));
$get_datetime = $date->format('d.m.Y H:i:s');

6

通常,此日期功能对每个人都有用:date(“ Y / m / d”);

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

因此,大概像这样使用它来获取我们自己的时区:

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

此功能显示24小时时间。


它为我设定的日期为1970年!
iKamy19年

5

以下是一些经常使用的字符:

  1. h-小时的12小时格式,前导零(01至12)
  2. i-以零开头的分钟(00到59)
  3. s-前导零的秒数(00至59)
  4. a-小写的前子午节和后子午节(上午或下午)

获取您的时区

<?php
    date_default_timezone_set("America/New_York");
    echo "The time is " . date("h:i:sa");
?>

检查一下(可选)

<?php
    $d = mktime(11, 14, 54, 8, 12, 2014);
    echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

对于日期

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

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

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

Source-W3-学校


1
什么是尾随的目的.date("Y/m/d") . ;
彼得·莫滕森

我想连接另一个字符串或变量。感谢您的修改。:-)
Raheel Khan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.