จะตรวจสอบได้อย่างไรว่าวันที่ / เวลาปัจจุบันเกินวันที่ / เวลาที่ตั้งไว้หรือไม่?


115

ฉันกำลังพยายามเขียนสคริปต์ที่จะตรวจสอบว่าวันที่ / เวลาปัจจุบันเลยค่า 05/15/2010 at 4PM

ฉันจะใช้ฟังก์ชัน date () ของ PHP เพื่อทำการตรวจสอบนี้ได้อย่างไร

คำตอบ:


228

เนื่องจาก PHP> = 5.2.2 คุณสามารถใช้DateTimeคลาสดังนี้:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

สตริงส่งผ่านไปยังตัวสร้าง DateTimeจะแยกไปตามกฎเหล่านี้


โปรดทราบว่ายังสามารถใช้งานtimeและstrtotimeฟังก์ชันต่างๆ ดูคำตอบเดิม


6
การประทับเวลามีข้อ จำกัด บางประการและข้อบกพร่องบางอย่างเช่นกันเช่นการประทับเวลาไม่สามารถจัดการวันที่ก่อนปี 1970 และหลังปี 2038 (ดูคำตอบของ Ivar Koster)
Steel Brain

1
เรามักจะเห็นการใช้ DateTime ใหม่ () โดยไม่มีพารามิเตอร์ในทางที่ผิดหากคุณใช้วันที่ UTC (ตามที่ควร) ชอบใช้ DateTime ใหม่ ("now", DateTimeZone ('UTC') ใหม่) วิธีนี้จะป้องกันไม่ให้แอปของคุณเกิดข้อผิดพลาดในวันที่ ฉันแนะนำให้คุณเก็บไว้ในตัวแปรคงที่ของฟังก์ชันคลาสคงที่หรือที่อื่นในกระบวนการทำงานของคุณ ...
Loenix

จะเกิดอะไรขึ้นถ้าเรามีวัตถุ DateTime อยู่แล้วและเราต้องการทราบว่าสิ่งนี้ผ่านไปแล้วหรือไม่เนื่องจากเราไม่สามารถส่งวัตถุไปยังตัวสร้าง DateTime ตามที่คุณแนะนำได้ เราควรใช้ getTimestamp () และเปรียบเทียบกับเวลา () หรือไม่? @Salman A
user4271704

@ user4271704 นี่new DateTime('2010-05-15')เป็นเพียงตัวอย่างอาจเป็นอ็อบเจกต์ DateTime ที่คุณเตรียมใช้งานก่อนหน้านี้
Salman A

สมมติว่า$objectเป็นวัตถุ DateTime ฉันใช้if (new DateTime() > $object) {}และทำงานผิดพลาด แต่ใช้if (time() > $bject->getTimeStamp()) {}งานได้จริง @Salman A
user4271704

77

นอกจากนี้ยังมีคลาสDateTimeซึ่งใช้ฟังก์ชันสำหรับตัวดำเนินการเปรียบเทียบ

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
มันใช้ฟังก์ชันอะไรสำหรับสิ่งนี้?
still_dreaming_1

6

ตรวจสอบstrtotimeฟังก์ชันของ PHP เพื่อแปลงวันที่ / เวลาที่คุณตั้งไว้เป็นเวลาประทับ: http://php.net/manual/en/function.strtotime.php

หากstrtotimeไม่สามารถจัดการรูปแบบวันที่ / เวลาของคุณได้อย่างถูกต้อง ("16:00 น." อาจใช้งานได้ แต่ไม่ใช่ "เวลา 16.00 น.") คุณจะต้องใช้ฟังก์ชันสตริงเช่นsubstrเพื่อแยกวิเคราะห์ / แก้ไขรูปแบบของคุณและเรียกข้อมูลการประทับเวลาของคุณผ่าน mktimeฟังก์ชั่นอื่นเช่น

จากนั้นเปรียบเทียบการประทับเวลาที่เป็นผลลัพธ์กับวันที่ / เวลาปัจจุบัน ( if ($calulated_timestamp > time()) { /* date in the future */ }) เพื่อดูว่าวันที่ / เวลาที่ตั้งไว้เป็นอดีตหรือในอนาคต

ฉันขอแนะนำให้อ่าน PHP-doc เกี่ยวกับฟังก์ชันวันที่ / เวลาและกลับมาที่นี่พร้อมกับซอร์สโค้ดบางส่วนของคุณเมื่อคุณติดขัด


ดูคำตอบของ Ivar Koster
Steel Brain

1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

แน่นอนนี้จะไม่ทำงานตามจะเท่ากับ$myDate string (0) ""
Nikola Petkanski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.