Thêm phút vào ngày giờ trong PHP


95

Tôi thực sự gặp khó khăn với việc thêm X phút vào ngày giờ, sau khi thực hiện rất nhiều thao tác đọc hướng dẫn sử dụng google và PHP, tôi dường như không đi đến đâu.

Định dạng ngày giờ tôi có là:

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

Số phút để thêm sẽ chỉ là một số từ 0 đến 59

Tôi muốn đầu ra giống với định dạng đầu vào có thêm số phút.

Ai đó có thể cho tôi một ví dụ về mã làm việc, vì những nỗ lực của tôi dường như không đưa tôi đến đâu?

Câu trả lời:


176
$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');

Các tiêu chuẩn ISO 8601 cho thời gian là một chuỗi theo hình thức P{y}Y{m1}M{d}DT{h}H{m2}M{s}Snơi {*}các bộ phận được thay thế bằng một giá trị số chỉ bao lâu thời gian là.

Ví dụ: P1Y2DT5Scó nghĩa là 1 năm, 2 ngày và 5 giây.

Trong ví dụ trên, chúng tôi đang cung cấp PT5M(hoặc 5 phút) cho hàm DateIntervaltạo.


Với ngày: 2011-11-18 00:00 nếu tôi thêm 5 phút, kết quả là tôi nhận được 2012-04-18 00:00. `$ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (new DateInterval ('P'. $ thời lượng. 'M')); $ endTime = $ time-> format ('Ymd H: i'); echo $ endTime; `` Các ứng dụng cho định dạng, có vẻ như hôm nay tôi cũng không thể giải quyết được vấn đề này ^ _ ^
Luke B

2
DateTime tốt hơn strtotime như thế nào?
bozdoz

11
'PT' đại diện cho điều gì?
NicholasJohn

1
@bozdoz Vấn đề không phải là phương pháp nào "tốt hơn". strtotimetạo ra một dấu thời gian Unix như một dấu thời gian integerhữu ích nếu bạn đang phân loại ngày tháng trong php chẳng hạn. Các DateTimelớp học cung cấp tùy chọn cho các hoạt động đối tượng và phong cách thủ tục. Nó dễ đọc hơn và cũng có hỗ trợ tốt hơn để xử lý sự khác biệt giữa các múi giờ khác nhau; ví dụ, nếu bạn có một dự án xuất ngày cho nhiều múi giờ khác nhau được lấy từ cùng một phiên bản dữ liệu.
DrewT

1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Định dạng bắt đầu bằng chữ P, cho "dấu chấm". Mỗi khoảng thời gian được biểu thị bằng một giá trị số nguyên, theo sau là một ký hiệu khoảng thời gian. Nếu thời gian chứa các yếu tố thời gian, mà phần của đặc tả được trước bởi bức thư T.
vee

110

Lớp DateTime của PHP có một phương thức sửa đổi hữu ích có văn bản dễ hiểu.

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

Bạn cũng có thể sử dụng phép nội suy hoặc nối chuỗi để tham số hóa nó:

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

10
Ngắn nhất và đẹp nhất!

1
Cả hai câu trả lời hàng đầu đều tuyệt vời và hoạt động tốt, nhưng tôi thích câu này hơn. Chỉ có vẻ đơn giản và trực quan hơn.
HartleySan

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

kết quả là

2011-11-17 05:21:00

Bản demo trực tiếp là here

Nếu bạn chưa quen với strtotimenó, bạn nên php.netkhám phá sức mạnh tuyệt vời của nó :-)


1
Hiểu nhất một điều
Naveen DA

19

Bạn có thể làm điều này với các hàm gốc một cách dễ dàng:

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

Tôi khuyên bạn nên sử dụng phương thức lớp DateTime, vừa được đăng bởi Tim.


7

Tôi nghĩ điều này cũng sẽ giúp ích cho một số người khi xử lý các múi giờ. Giải pháp đã sửa đổi của tôi dựa trên giải pháp của @Tim Cooper, câu trả lời chính xác ở trên.

$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");

Dòng in đậm, dòng 3, là phần cộng. Tôi hy vọng điều này cũng giúp một số người.


4

Câu trả lời hơi muộn, nhưng phương pháp tôi sẽ sử dụng là:

// 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');

Hoặc trong 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')

3

Nếu bạn muốn đưa ra một biến có chứa phút.

Sau đó, tôi nghĩ rằng đây là một cách tuyệt vời để đạt được điều này.

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

2

Sử dụng strtotime("+5 minute", $date);


Thí dụ:

$date = "2017-06-16 08:40:00";
$date = strtotime($date);
$date = strtotime("+5 minute", $date);
echo date('Y-m-d H:i:s', $date);

2

Tôi không biết tại sao cách tiếp cận được đặt là giải pháp không hiệu quả với tôi. Vì vậy, tôi đăng ở đây những gì đã làm việc cho tôi với hy vọng nó có thể giúp bất kỳ ai:

$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;

1

Như đã lưu ý bởi Brad và Nemoden trong câu trả lời của họ ở trên, strtotime () là một hàm tuyệt vời. Cá nhân tôi thấy Đối tượng DateTime tiêu chuẩn quá phức tạp đối với nhiều trường hợp sử dụng. Ví dụ, tôi chỉ muốn thêm 5 phút vào thời gian hiện tại.

Tôi đã viết một hàm trả về ngày tháng dưới dạng chuỗi với một số tham số tùy chọn:
1.) time: String | ví dụ: "+5 phút" (mặc định = thời gian hiện tại)
2.) định dạng: Chuỗi | ví dụ: "Ymd H: i: s" (default = "Ymd H: i: s O")

Rõ ràng, đây không phải là một phương pháp đầy đủ tính năng. Chỉ là một chức năng nhanh chóng và đơn giản để sửa đổi / định dạng ngày hiện tại.

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

Thêm một ví dụ về chức năng để làm điều này: (thay đổi định dạng thời gian và khoảng thời gian theo cách bạn muốn điều này cho function.dateđiều này cho DateInterval ):

(Tôi cũng đã viết một dạng thay thế của hàm bên dưới .)

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

định dạng ngày giờ mysql một dòng

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

-1

Không sử dụng biến:

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

Với việc sử dụng một biến:

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

$yourDategì? Câu trả lời này bổ sung thêm gì cho các câu trả lời tương tự đã đăng những năm trước?
Không có

@ J.Money $ yourDate thân mến nghĩa là $ tên biến và Có lẽ câu trả lời của tôi sẽ hữu ích cho ai đó sau 100 năm nữa. Không quan trọng khi nào chúng ta nên trả lời cho đến khi câu hỏi không được đóng lại. Tôi hy vọng bạn sẽ hiểu và loại bỏ đánh dấu tiêu cực.
Wajid khan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.