如何使用php获取昨天的日期?


89

我想使用php中的特定日期格式来获取昨天的日期,这是以下格式:

$today = date("d.m.Y"); //15.04.2013

可能吗?

如果应该分别更改月份和年份,请考虑它们。


1
date(“ dmy”,time()-60 * 60 * 24);
NINCOMPOOP

您尝试过我的解决方案吗?这也将适用于变化的月份
Fabio

我上面的用户名“ noob”为其注释添加了一个很好的含义的完美时刻:)
STT LCU 2013年

Answers:


261

你去

date('d.m.Y',strtotime("-1 days"));

如果月份更改,这也将起作用


一个小巧的选择:如果该时间跨过DST更改,则在午夜附近会出现功能故障。在中午明确地去那里有帮助。
Deduplicator

1
错了。关于DST的3件事:1它取决于服务器时间,如果服务器具有正确的时区,则不会影响我的功能。2不是全世界都受到DST的影响,有些地方没有使用它。大多数地方的3个地方都会在一天的头几个小时(例如凌晨2点或3点)更改时间,因此不会影响更改日期。
法比奥2014年

1
1.因此该功能知道并注意一天可以不是24h吗?2.即使是坏了的时钟也每天两次正确。3.被盗/被复制的确切小时数对计算并不重要。
Deduplicator 2014年

1
毫无疑问,每天1点不是DST更改时间,服务器当然会根据2更改时间,但这不是3点,这很重要,如果时间在午夜改变,那可能是正确的,不在其他时间
Fabio

7

你可以这样做

date("F j, Y", time() - 60 * 60 * 24);

date("F j, Y", strtotime("yesterday"));

3
不能保证有夏令时……这些天人们真的应该使用DateTime对象
Mark Ba​​ker

如果在UTC时间运行,将可以正常工作。date_default_timezone_set('UTC');
帕特里克

7

步骤1

我们需要在函数date()中设置格式数据:函数date()返回一个字符串,该字符串使用给定的整数时间戳或当前时间(如果未提供时间戳)根据给定的格式字符串格式化。换句话说,时间戳是可选的,默认为time()的值。

<?php
echo date("F j, Y");
?>

结果:2010年3月30日

第2步

对于“昨天”日期,请使用php函数mktime():函数mktime()返回与给定参数相对应的Unix时间戳。此时间戳是一个长整数,包含Unix纪元(1970年1月1日00:00:00 GMT)与指定时间之间的秒数。可以从右到左按顺序忽略参数;忽略的所有参数将根据本地日期和时间设置为当前值。

<?php
echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
?>

结果:1269820800

第三步

现在合并所有内容并查看以下内容:

<?php
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
echo $yesterday;
?>

结果:2010年3月29日

以类似的方式操作,可以收到小时后的时间。

<?php
$yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
echo $yesterday;
?>

结果:20:00:00

或7天前:

<?php
$week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
echo $week;
?>

结果:2010-03-23


7

试试这个

        $tz    = new DateTimeZone('Your Time Zone');
        $date  = new DateTime($today,$tz);
        $interval = new DateInterval('P1D');
        $date->sub($interval); 

        echo $date->format('d.m.y');

        ?>           

看到这个php.net/manual/en/book.datetime.php '..这也将随着月份的变化而起作用
alwaysLearn

9
新的DateTime('yesterday')
Virgili Garcia

$ yesterday =新的DateTime('yesterday',新的DateTimeZone('您的时区'));
miralong

用仅代码的答案进行一些解释会很好。
mickmackusa


2

试试这个

<?php
$yesterday = date(“d.m.Y”, time()-86400);
echo $yesterday;

3
由于夏时制,一天并不总是有86400秒!因此,这种计算每年可能会出错两次!
sbrbot

...并且由于leap秒。
塞巴斯蒂安·马赫

2

如果您在PHP应用程序中定义了时区(如您所愿),则可以通过以下方式进行操作:

date_default_timezone_set('Europe/Paris');

然后就这么简单:

$yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
echo $yesterday->format('Y-m-d'); // or whatever format you want

(您可能需要定义一个常量或环境变量来存储默认时区。)


1

DateTime的另一种OOP方法,用于设置确切的小时:

$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
echo $yesterday->format('Y-m-d H:i:s') . "\n";

0

您还可以使用Carbon库执行此操作:

Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'

其他格式:

Carbon::yesterday()->toDateString();          // '2019-03-26'
Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'

Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
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.