ฉันกำลังพยายามหาวันที่ที่มีอายุหนึ่งปีนับจากวันที่ฉันระบุ
รหัสของฉันมีลักษณะดังนี้:
$futureDate=date('Y-m-d', strtotime('+one year', $startDate));
มันกลับวันที่ผิด ความคิดใด ๆ ทำไม?
ฉันกำลังพยายามหาวันที่ที่มีอายุหนึ่งปีนับจากวันที่ฉันระบุ
รหัสของฉันมีลักษณะดังนี้:
$futureDate=date('Y-m-d', strtotime('+one year', $startDate));
มันกลับวันที่ผิด ความคิดใด ๆ ทำไม?
คำตอบ:
ในการเพิ่มหนึ่งปีในวันนี้ให้ใช้สิ่งต่อไปนี้:
$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));
สำหรับตัวอย่างอื่น ๆ คุณต้องเริ่มต้น $ เริ่มต้นด้วยค่าการประทับเวลาเช่น:
$StartingDate = mktime(); // todays date as a timestamp
ลองทำตามนี้
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));
หรือ
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
$futureDate=date('Y-m-d', strtotime('+1 year'));
$ futureDate คือหนึ่งปีนับจากนี้!
$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );
$ futureDate คือหนึ่งปีจาก $ startDate!
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
ตามที่ K Prime กล่าวไว้ด้านล่างแทน
ลอง: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
,
ไป.
และการทำงานdate("Y-m-d",strtotime('+1 year '.$startDate))
;
// Declare a variable for this year
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;
// Check your code
echo "This year is ";
echo $this_year;
echo "<br />";
echo "Next year is ";
echo $next_year;
echo "<br />";
echo "The year after that is ";
echo $year_after;
เพิ่งมีปัญหาเดียวกันอย่างไรก็ตามนี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุด:
<?php (date('Y')+1).date('-m-d'); ?>
$next_year = (date('Y')+1)
.
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));
//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));
หวังว่าโค้ดที่ง่ายกว่านี้จะช่วยใครบางคนในอนาคต :)
ฉันชอบแนวทาง OO:
$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))
ใช้DateTimeImmutable
มิฉะนั้นคุณจะแก้ไขวันที่เดิมด้วย! เพิ่มเติมเกี่ยวกับ DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.php
หากคุณต้องการจากวันนี้คุณสามารถทำได้ตลอดเวลา:
new \DateTimeImmutable('-1 Month');
หากคุณใช้ PHP 5.3 นั่นเป็นเพราะคุณต้องตั้งค่าเขตเวลาเริ่มต้น:
date_default_timezone_set()
strtotime()
กำลังส่งคืนbool(false)
เนื่องจากไม่สามารถแยกวิเคราะห์สตริงได้'+one year'
(ไม่เข้าใจ "one") false
จากนั้นก็ถูกทิ้งโดยปริยายไปประทับเวลาinteger
0
เป็นความคิดที่ดีที่จะตรวจสอบstrtotime()
ว่าเอาต์พุตไม่ได้อยู่bool(false)
ก่อนที่คุณจะนำไปใช้ในฟังก์ชันอื่น ๆ
ส่งคืนค่า
ส่งคืนการประทับเวลาของความสำเร็จไม่เช่นนั้นจะเป็นเท็จ ก่อนหน้า PHP 5.1.0 ฟังก์ชันนี้จะคืนค่า -1 เมื่อล้มเหลว
ลองสิ่งนี้
$nextyear = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)), date("d",strtotime($startDate)), date("Y",strtotime($startDate))+1));
นอกจากนี้ยังมีวิธีแก้ปัญหาที่ง่ายและซับซ้อนน้อยกว่า:
$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
ทางออกของฉันคือ: date('Y-m-d', time()-60*60*24*365);
คุณสามารถทำให้ "อ่านได้" มากขึ้นด้วยคำจำกัดความ:
define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR', 60 * ONE_MINUTE);
define('ONE_DAY', 24 * ONE_HOUR);
define('ONE_YEAR', 365 * ONE_DAY);
date('Y-m-d', time()-ONE_YEAR);
ในกรณีของฉัน (ฉันต้องการเพิ่ม 3 ปีในวันที่ปัจจุบัน) วิธีแก้ปัญหาคือ:
$future_date = date('Y-m-d', strtotime("now + 3 years"));
ถึง Gardenee, Treby และ Daniel Lima: วันที่ 29 กุมภาพันธ์จะเกิดอะไรขึ้น? บางครั้งเดือนกุมภาพันธ์มีเพียง 28 วัน :)