วิธีรับวันที่เมื่อวานโดยใช้ php?


93

ฉันต้องการรับวันที่เมื่อวานโดยใช้รูปแบบวันที่เฉพาะใน php นี่คือรูปแบบ:

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

เป็นไปได้ไหม?

พิจารณาเดือนและปีว่าควรเปลี่ยนตามลำดับหรือไม่


1
วันที่ ("dmy", เวลา () - 60 * 60 * 24);
NINCOMPOOP

คุณลองวิธีแก้ปัญหาของฉันไหม ซึ่งจะใช้ได้กับเดือนที่เปลี่ยนแปลงเช่นกัน
Fabio

ช่วงเวลาที่สมบูรณ์แบบเมื่อชื่อผู้ใช้ "noob" ด้านบนฉันเพิ่มความหมายที่ดีให้กับความคิดเห็น :)
STT LCU

คำตอบ:


268

เอาเข้าไป

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

สิ่งนี้จะใช้ได้เช่นกันหากมีการเปลี่ยนแปลงเดือน


ตัวเลือกเล็ก ๆ น้อย ๆ : ฟังก์ชันของคุณจะมีปัญหาในเวลาใกล้เที่ยงคืนหากช่วงเวลานั้นครอบคลุมการเปลี่ยนแปลง DST การไปเที่ยงอย่างชัดเจนช่วยที่นั่น
Deduplicator

1
ผิด 3 สิ่งเกี่ยวกับ DST: 1 ขึ้นอยู่กับเวลาของเซิร์ฟเวอร์หากเซิร์ฟเวอร์มีเขตเวลาที่ถูกต้องจะไม่ส่งผลต่อฟังก์ชันของฉัน 2 ไม่ใช่ทั้งโลกที่ได้รับผลกระทบจาก DST มีสถานที่ที่ไม่ใช้มัน 3 สถานที่ส่วนใหญ่ใช้เปลี่ยนเวลาในช่วงชั่วโมงแรกของวัน (เช่นตี 2 หรือตี 3) ดังนั้นจึงไม่ส่งผลต่อวันที่เปลี่ยนไป
Fabio

1
1. เพื่อให้ฟังก์ชั่นนั้นรู้และระวังว่าวันหนึ่ง ๆ สามารถเป็นเวลาอื่นที่ไม่ใช่ 24 ชั่วโมงได้? 2. แม้แต่นาฬิกาที่เสียก็ยังถูกต้องวันละสองครั้ง 3. ชั่วโมงที่ถูกขโมย / ซ้ำกันนั้นไม่สำคัญสำหรับการคำนวณ
Deduplicator

1
ไม่มีความรู้สึก 1 ต่อวันไม่เกิน 24 จนกว่า DST จะเปลี่ยนเวลาและเซิร์ฟเวอร์เปลี่ยนเวลาตาม 2 แน่นอน แต่นั่นไม่ใช่ประเด็นที่ 3 สิ่งนี้สำคัญมากแทนความคิดของคุณอาจถูกต้องหากเวลาเปลี่ยนไปเป็นเที่ยงคืน ไม่ใช่ในเวลาอื่น
Fabio

7

คุณสามารถทำได้โดย

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

หรือโดย

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

3
ไม่รับประกันกับการประหยัดเวลากลางวัน ... ผู้คนควรใช้วัตถุ DateTime ในปัจจุบัน
Mark Baker

จะทำงานได้ดีหากทำงานในเวลา UTC date_default_timezone_set ('UTC');
Patrick

7

ขั้นตอนที่ 1

เราต้องการข้อมูลรูปแบบการตั้งค่าในฟังก์ชัน date (): วันที่ของฟังก์ชัน () ส่งคืนสตริงที่จัดรูปแบบตามสตริงรูปแบบที่กำหนดโดยใช้การประทับเวลาจำนวนเต็มที่กำหนดหรือกำหนดเวลา ifno เวลาปัจจุบัน กล่าวอีกนัยหนึ่ง timestamp เป็นทางเลือกและกำหนดค่าของเวลา ()

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

ผลลัพธ์: 30 มีนาคม 2553

ขั้นตอนที่ 2

สำหรับวันที่ "เมื่อวาน" ให้ใช้ฟังก์ชัน php mktime (): ฟังก์ชัน mktime () ส่งคืนการประทับเวลา Unix ที่ตรงกับอาร์กิวเมนต์ที่กำหนด การประทับเวลานี้เป็นจำนวนเต็มที่ยาวที่มีจำนวนวินาทีระหว่าง Unix Epoch (1 มกราคม 1970 00:00:00 GMT) และเวลาที่ระบุ อาร์กิวเมนต์อาจถูกทิ้งไว้ตามลำดับจากขวาไปซ้าย อาร์กิวเมนต์ใด ๆ ที่ละไว้จะถูกตั้งค่าเป็นค่าปัจจุบันตามวันที่และเวลาในท้องถิ่น

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

ผลลัพธ์: 1269820800

ขั้นตอนที่ 3

ตอนนี้รวมทั้งหมดและดูสิ่งนี้:

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

ผลลัพธ์: 29 มีนาคม 2553

การดำเนินการในทำนองเดียวกันเป็นไปได้ที่จะรับเวลาย้อนหลัง

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

10
DateTime ใหม่ ('เมื่อวานนี้')
Virgili Garcia

1
$ เมื่อวาน = DateTime ใหม่ ('เมื่อวาน', DateTimeZone ใหม่ ('โซนเวลาของคุณ'));
miralong

คำอธิบายเล็กน้อยพร้อมคำตอบแบบโค้ดเท่านั้นจะดีกว่า
mickmackusa


4

หากคุณกำหนดเขตเวลาในแอป 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

(คุณอาจต้องการกำหนดค่าคงที่หรือตัวแปรสภาพแวดล้อมเพื่อจัดเก็บเขตเวลาเริ่มต้นของคุณ)


2

ลองดู

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

3
เนื่องจากการออมแสงในแต่ละวันไม่ได้มี 86400 วินาทีเสมอไป! ดังนั้นการคำนวณนี้อาจผิดพลาดปีละสองครั้ง!
sbrbot

... และเนื่องจากวินาทีอธิกสุรทิน
Sebastian Mach

1

วิธี OOP อื่นสำหรับ DateTime พร้อมการตั้งค่าชั่วโมงที่แน่นอน:

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

0

คุณสามารถทำได้โดยใช้ห้องสมุดคาร์บอน :

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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.