làm thế nào để có được ngày của ngày hôm qua bằng cách sử dụng php?


90

Tôi muốn lấy ngày hôm qua bằng cách sử dụng định dạng ngày cụ thể trong php, đây là định dạng:

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

Có khả thi không?

Cân nhắc tháng và năm nếu chúng nên được thay đổi tương ứng.


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

bạn đã thử giải pháp của tôi chưa? điều này cũng sẽ hoạt động với các tháng thay đổi
Fabio

khoảnh khắc hoàn hảo khi tên người dùng "noob" ở trên tôi thêm một ý nghĩa tốt cho nhận xét của nó :)
STT LCU

Câu trả lời:


262

đây bạn đi

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

điều này cũng sẽ hoạt động nếu tháng thay đổi


Một lựa chọn nhỏ: Chức năng của bạn gặp sự cố vào gần nửa đêm nếu thời gian đó kéo dài thời gian thay đổi DST. Rõ ràng đi qua buổi trưa sẽ giúp ở đó.
Deduplicator

1
Sai rồi . 3 điều về DST: 1 nó phụ thuộc vào thời gian của máy chủ, nếu máy chủ có múi giờ chính xác thì nó sẽ không ảnh hưởng đến chức năng của tôi. 2 không phải cả thế giới bị ảnh hưởng bởi DST, có những nơi không sử dụng nó. 3 hầu hết các địa điểm sử dụng để thay đổi thời gian vào những giờ đầu tiên trong ngày (như 2 hoặc 3 giờ sáng) để không ảnh hưởng đến một ngày thay đổi.
Fabio

1
1. Vì vậy, chức năng đó biết và chú ý rằng một ngày có thể khác với 24h? 2. Ngay cả một chiếc đồng hồ bị hỏng là đúng hai lần mỗi ngày. 3. Giờ chính xác bị đánh cắp / sao chép không quá quan trọng đối với việc tính toán.
Deduplicator

1
Không có ý nghĩa 1 một ngày không phải là 24 cho đến khi DST thay đổi thời gian và máy chủ thay đổi thời gian theo 2, tất nhiên là như vậy nhưng đó không phải là điểm 3, thay vào đó, ý tưởng của bạn có thể đúng nếu thời gian thay đổi vào lúc nửa đêm, không phải trong những giờ khác
Fabio

7

bạn có thể làm điều này bằng cách

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

hoặc bằng cách

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

3
Không được bảo đảm với tiết kiệm ánh sáng ban ngày ... người thực sự nên sử dụng DateTime đối tượng những ngày này
Mark Baker

Sẽ hoạt động tốt nếu hoạt động vào giờ UTC. date_default_timezone_set ('UTC');
Patrick

7

Bước 1

Chúng ta cần dữ liệu định dạng đã đặt trong hàm date (): Hàm date () trả về một chuỗi được định dạng theo chuỗi định dạng đã cho bằng cách sử dụng dấu thời gian số nguyên đã cho hoặc thời gian hiện tại nếu không có dấu thời gian nào được đưa ra. Nói cách khác, dấu thời gian là tùy chọn và mặc định là giá trị của thời gian ().

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

kết quả: ngày 30 tháng 3 năm 2010

Bước 2

Đối với ngày "hôm qua", hãy sử dụng hàm php mktime (): Hàm mktime () trả về dấu thời gian Unix tương ứng với các đối số đã cho. Dấu thời gian này là một số nguyên dài chứa số giây giữa Kỷ nguyên Unix (ngày 1 tháng 1 năm 1970 00:00:00 GMT) và thời gian được chỉ định. Các đối số có thể được bỏ đi theo thứ tự từ phải sang trái; bất kỳ đối số nào bị bỏ qua sẽ được đặt thành giá trị hiện tại theo ngày và thời gian cục bộ.

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

kết quả: 1269820800

Bước 3

Bây giờ hợp nhất tất cả và nhìn vào điều này:

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

kết quả: ngày 29 tháng 3 năm 2010

Hoạt động tương tự, có thể nhận lại giờ thời gian.

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

kết quả: 20:00:00

hoặc 7 ngày trước:

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

kết quả: 2010-03-23


7

thử đi

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

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

        ?>           

hãy xem php.net/manual/en/book.datetime.php '.. Điều này cũng sẽ hoạt động với sự thay đổi của tháng
luôn luônTìm hiểu

9
DateTime mới ('hôm qua')
Virgili Garcia

$ hôm qua = new DateTime ('hôm qua', DateTimeZone mới ('Múi giờ của bạn'));
miralong

Một chút giải thích với câu trả lời chỉ có mã này sẽ rất hay.
mickmackusa


2

thử đi

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

3
Do tiết kiệm ánh sáng ban ngày không phải lúc nào cũng có 86400 giây! Vì vậy, phép tính này có thể sai hai lần một năm!
sbrbot

... và do giây nhuận.
Sebastian Mach

2

Nếu bạn xác định múi giờ trong ứng dụng PHP của mình (như bạn nên làm), bạn có thể thực hiện theo cách này:

date_default_timezone_set('Europe/Paris');

Sau đó, nó đơn giản như:

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

(Bạn có thể muốn xác định một hằng số hoặc biến môi trường để lưu trữ múi giờ mặc định của mình.)


1

Một phương pháp OOP khác cho DateTime với việc đặt giờ chính xác:

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

0

Bạn cũng có thể thực hiện việc này bằng thư viện Carbon :

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

Ở các định dạng khác:

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.