ในบางสถานการณ์ฉันต้องการเพิ่ม 1 วันให้กับค่าของตัวแปรที่จัดรูปแบบ DATETIME ของฉัน:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
วิธีที่ดีที่สุดในการทำคืออะไร?
ในบางสถานการณ์ฉันต้องการเพิ่ม 1 วันให้กับค่าของตัวแปรที่จัดรูปแบบ DATETIME ของฉัน:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
วิธีที่ดีที่สุดในการทำคืออะไร?
คำตอบ:
หากคุณต้องการทำใน PHP:
// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
หากคุณต้องการเพิ่มวันที่ใน MySQL:
-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
time()
ด้วยstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.
มีอีกวิธีหนึ่งในการดำเนินการกับDateTimeซึ่งเปิดตัวใน PHP 5.2 ซึ่งแตกต่างจากการใช้strtotime()
สิ่งนี้จะบันทึกเวลาออมแสงและปีอธิกสุรทิน
$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.3
$datetime = new DateTime('2013-01-29');
$datetime->add(new DateInterval('P1D'));
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.4
echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');
// Available in PHP 5.5
$start = new DateTimeImmutable('2013-01-29');
$datetime = $start->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
+2 day
หรือ+2 days
(เห็นได้ชัดว่า+2 days
ถูกต้องตามความหมายมากกว่า)
DateTimestring time
คอนสตรัคใช้เวลาพารามิเตอร์ $time
อาจเป็นสิ่งที่แตกต่างกันก็ต้องเคารพรูปแบบวันที่และเวลา
มีค่าที่ถูกต้องเป็นตัวอย่าง:
'now'
(ค่าเริ่มต้น)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
ดังนั้นในกรณีของคุณคุณสามารถใช้สิ่งต่อไปนี้
$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
strtotime
เพื่อแปลงสตริงเป็นการประทับเวลาเช่น:
$time = strtotime($myInput);
$newTime = $time + 86400;
หากเพิ่มเพียง 1 วันการใช้ strtotime อีกครั้งอาจจะมากเกินไป
date()
เขตเวลาท้องถิ่นจะถูกนำมาพิจารณาซึ่งจะดูแลการออมแสง
คุณสามารถใช้ได้
$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');
คุณสามารถใช้ดังต่อไปนี้
$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
คุณยังสามารถตั้งค่าวันเป็นค่าคงที่และใช้ดังนี้
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
ใช้เวลาขอเซิร์ฟเวอร์เพื่อเพิ่มวัน ทำงานตามที่คาดไว้
25/08/19 => 27/09/19
$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));
ที่นี่ '+2 วัน' เพื่อเพิ่มจำนวนวัน
มีวิธีเพิ่มวันใน php date ที่กระชับและใช้งานง่ายกว่า อย่าเข้าใจฉันผิดนิพจน์ php เหล่านั้นดีมาก แต่คุณต้อง google เสมอว่าจะปฏิบัติอย่างไร ฉันพลาดสิ่งอำนวยความสะดวกในการเติมอัตโนมัติสำหรับสิ่งนั้น
นี่คือวิธีที่ฉันชอบจัดการกับกรณีเหล่านี้:
(new Future(
new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
new OneDay()
))
->value();
สำหรับฉันมันเป็นวิธีที่ง่ายกว่าและการเติมข้อความอัตโนมัติทำงานนอกกรอบ ไม่จำเป็นต้องใช้ Google สำหรับการแก้ปัญหาในแต่ละครั้ง
เป็นโบนัสที่ดีคุณไม่ต้องกังวลกับการจัดรูปแบบค่าที่ได้เนื่องจากเป็นรูปแบบ ISO8601 อยู่แล้ว