การเพิ่มนาทีให้กับเวลาใน PHP


99

ฉันติดอยู่กับการเพิ่ม X นาทีในวันที่และเวลาหลังจากอ่านคู่มือ google'ing และ PHP เป็นจำนวนมากดูเหมือนว่าฉันจะไม่ไปไหน

รูปแบบวันเวลาที่ฉันมีคือ:

2011-11-17 05:05: year-month-day hour:minute

นาทีที่จะเพิ่มจะเป็นตัวเลขระหว่าง 0 ถึง 59

ฉันต้องการให้ผลลัพธ์เหมือนกับรูปแบบอินพุตที่มีการเพิ่มนาที

มีใครช่วยยกตัวอย่างโค้ดที่ใช้งานได้ไหมเนื่องจากความพยายามของฉันดูเหมือนจะไม่ทำให้ฉันไปไหนได้

คำตอบ:


178
$minutes_to_add = 5;

$time = new DateTime('2011-11-17 05:05');
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));

$stamp = $time->format('Y-m-d H:i');

ISO 8601 มาตรฐานสำหรับระยะเวลาเป็นสตริงในรูปแบบของP{y}Y{m1}M{d}DT{h}H{m2}M{s}Sที่{*}ชิ้นส่วนจะถูกแทนที่ด้วยค่าตัวเลขที่ระบุว่านานระยะเวลาคือ

ตัวอย่างเช่นP1Y2DT5Sหมายถึง 1 ปี 2 วัน 5 วินาที

ในตัวอย่างด้านบนเรากำลังจัดเตรียมPT5M(หรือ 5 นาที) ให้กับผู้DateIntervalสร้าง


ด้วยวันที่: 2011-11-18 00:00 ถ้าฉันเพิ่ม 5 นาทีฉันจะได้รับ 2012-04-18 00:00 เป็นผล `$ time = DateTime ใหม่ ($ _ REQUEST ['start']); $ time-> เพิ่ม (DateInterval ใหม่ ('P'. $ ระยะเวลา. 'M')); $ endTime = $ time-> รูปแบบ ('Ymd H: i'); ก้อง $ endTime; `ประยุกต์ใช้สำหรับการจัดรูปแบบดูเหมือนว่าวันนี้ฉันไม่สามารถทำงานได้เช่นกัน ^ _ ^
Luke B

2
DateTime ดีกว่า strtotime อย่างไร
bozdoz

11
'PT' หมายถึงอะไร?
NicholasJohn16

1
@bozdoz ไม่ใช่คำถามว่าวิธีไหน "ดีกว่า" strtotimeสร้างการประทับเวลา Unix integerซึ่งมีประโยชน์หากคุณเป็นตัวอย่างเช่นการจัดเรียงวันที่ใน php DateTimeชั้นมีตัวเลือกสำหรับวัตถุและการดำเนินงานรูปแบบกระบวนการ อ่านได้ง่ายขึ้นและยังรองรับการจัดการความแตกต่างระหว่างเขตเวลาต่างๆได้ดีขึ้น ตัวอย่างเช่นหากคุณมีโปรเจ็กต์ที่แสดงวันที่สำหรับเขตเวลาต่างๆจำนวนมากที่มาจากอินสแตนซ์ข้อมูลเดียวกัน
DrewT

2
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> รูปแบบเริ่มต้นด้วยตัวอักษร P สำหรับ "จุด" แต่ละช่วงระยะเวลาแสดงด้วยค่าจำนวนเต็มตามด้วยตัวกำหนดช่วงเวลา หากระยะเวลามีองค์ประกอบของเวลาข้อกำหนดส่วนนั้นจะนำหน้าด้วยตัวอักษร T.
vee

114

คลาส DateTime ของ PHPมีวิธีแก้ไขที่เป็นประโยชน์ซึ่งใช้ข้อความที่เข้าใจง่าย

$dateTime = new DateTime('2011-11-17 05:05');
$dateTime->modify('+5 minutes');

คุณยังสามารถใช้การแก้ไขสตริงหรือการเรียงต่อกันเพื่อกำหนดพารามิเตอร์ได้:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");

10
สั้นและอร่อยที่สุด!

1
ทั้งสองคำตอบยอดนิยมนั้นยอดเยี่ยมและใช้ได้ผลดี แต่ฉันชอบคำตอบนี้มากกว่า ดูเหมือนง่ายและใช้งานง่ายมากขึ้น
HartleySan

38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

ผลลัพธ์คือ

2554-11-17 05:21:00 น

การสาธิตสดคือ here

หากคุณยังไม่คุ้นเคยstrtotimeคุณควรphp.netไปพบว่ามันเป็นพลังอันยิ่งใหญ่ :-)


1
เข้าใจมากที่สุด
Naveen DA

19

คุณสามารถทำได้ด้วยฟังก์ชันดั้งเดิมอย่างง่ายดาย:

strtotime('+59 minutes', strtotime('2011-11-17 05:05'));

ฉันขอแนะนำวิธีคลาส DateTime แต่โพสต์โดย Tim


7

ฉันคิดว่าสิ่งนี้จะช่วยได้บ้างเมื่อต้องจัดการกับเขตเวลาด้วย โซลูชันที่แก้ไขของฉันมีพื้นฐานมาจากโซลูชันของ @Tim Cooper ซึ่งเป็นคำตอบที่ถูกต้องด้านบน

$minutes_to_add = 10;
$time = new DateTime();
**$time->setTimezone(new DateTimeZone('America/Toronto'));**
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
$timestamp = $time->format("Y/m/d G:i:s");

เส้นตัวหนาบรรทัดที่ 3 คือส่วนเสริม ฉันหวังว่านี่จะช่วยคนได้เช่นกัน


4

คำตอบที่ล่าช้าเล็กน้อย แต่วิธีที่ฉันจะใช้คือ:

// Create a new \DateTime instance
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');

// Modify the date
$date->modify('+5 minutes');

// Output
echo $date->format('Y-m-d H:i:s');

หรือใน PHP> = 5.4

echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')

4

ฉันไม่รู้ว่าทำไมวิธีการตั้งค่าเป็นวิธีแก้ปัญหาไม่ได้ผลสำหรับฉัน ดังนั้นฉันจึงโพสต์สิ่งที่ได้ผลสำหรับฉันโดยหวังว่ามันจะช่วยใครได้:

$startTime = date("Y-m-d H:i:s");

//display the starting time
echo '> '.$startTime . "<br>";

//adding 2 minutes
$convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));

//display the converted time
echo '> '.$convertedTime;

3

หากคุณต้องการให้ตัวแปรที่มีนาที

แล้วฉันคิดว่านี่เป็นวิธีที่ยอดเยี่ยมในการบรรลุเป้าหมายนี้

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");


1

ดังที่ระบุไว้โดย Brad และ Nemoden ในคำตอบข้างต้น strtotime () เป็นฟังก์ชันที่ยอดเยี่ยม โดยส่วนตัวแล้วฉันพบว่า DateTime Object มาตรฐานมีความซับซ้อนมากเกินไปสำหรับกรณีการใช้งานจำนวนมาก ฉันแค่อยากจะเพิ่ม 5 นาทีให้กับเวลาปัจจุบันเช่น

ฉันเขียนฟังก์ชันที่ส่งคืนวันที่เป็นสตริงโดยมีพารามิเตอร์ที่เป็นทางเลือก:
1. ) time: String | เช่น: "+5 นาที" (ค่าเริ่มต้น = เวลาปัจจุบัน)
2. ) รูปแบบ: สตริง | เช่น "Ymd H: i: s" (default = "Ymd H: i: s O")

เห็นได้ชัดว่านี่ไม่ใช่วิธีที่มีคุณลักษณะครบถ้วน เป็นเพียงฟังก์ชันที่ง่ายและรวดเร็วสำหรับการปรับเปลี่ยน / จัดรูปแบบวันที่ปัจจุบัน

function get_date($time=null, $format='Y-m-d H:i:s O')
{
    if(empty($time))return date($format);
    return date($format, strtotime($time));
}

// Example #1: Return current date in default format
$date = get_date(); 

// Example #2: Add 5 minutes to the current date
$date = get_date("+5 minutes"); 

// Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
$date = get_date("-30 days", "Y-m-d H:i:s"); 

0

อีกหนึ่งตัวอย่างของฟังก์ชันที่จะทำสิ่งนี้: (เปลี่ยนรูปแบบเวลาและช่วงเวลาตามที่คุณต้องการตามนี้สำหรับ function.dateและสำหรับ DateInterval ):

(ฉันได้เขียนรูปแบบอื่นของฟังก์ชันด้านล่างด้วย)

// Return adjusted time.

function addMinutesToTime( $dateTime, $plusMinutes ) {

    $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
    $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $dateTime->format( 'Y-m-d H:i' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;

0

รูปแบบวันที่และเวลา mysql หนึ่งบรรทัด

$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");

-1

โดยไม่ต้องใช้ตัวแปร:

 $yourDate->modify("15 minutes");
 echo $yourDate->format( "Y-m-d H:i");

ด้วยการใช้ตัวแปร:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");

คืออะไร$yourDate? คำตอบนี้เพิ่มอะไรให้กับคำตอบที่คล้ายกันที่โพสต์ไว้เมื่อหลายปีก่อน
ไม่มี

Dear @ J.Money $ yourDate หมายถึงชื่อตัวแปร $ และบางทีคำตอบของฉันอาจเป็นประโยชน์สำหรับใครบางคนหลังจากผ่านไป 100 ปี ไม่สำคัญว่าเราควรตอบเมื่อใดจนกว่าจะไม่ปิดคำถาม ฉันหวังว่าคุณจะเข้าใจและลบเครื่องหมายลบออก
Wajid khan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.