Home > Software engineering >  How to subtract time from time array using php?
How to subtract time from time array using php?

Time:05-16

Hello seniors I have a question related to some PHP script.

I have an array containing time => ['12:10', '4:16', '2:5'] and have one html form containing input field of type 'number'.

I want when I enter some value in my form input field for example I enter 7, so after submitting the form in back-end the number 7 which i enter in input field is subtracted from the array which I mentioned above and I will get the result array like: ['5:10', '4:16', '2:5']

I have tried something like that but not able to implement my logic

$val = array(1, 0, 2, 1, 1);
    $subtract = 3.5;
    foreach ($val as $key => $item) {
        if ($subtract >= $item) {
            $subtract -= $item;
            $val[$key] = 0;
        } else {
            $val[$key] -= $subtract;
            $subtract = 0;
        }
    }

Any kind of help is highly appreciated

CodePudding user response:

You can use Carbon library for date/time manipulation:

<?php
use Carbon\Carbon;

$times = ['17:46', '03:05', '21:56'];
$timeshift = 3;

$new_times = array_map(
    fn($t) => Carbon::createFromFormat('H:i',  $t)
                ->subHours($timeshift)
                ->format('H:i'),
    $times
);

Test Carbon library online

CodePudding user response:

No need for library, just convert your first array to seconds: 1 hour = 3600 ; 1 minute = 60 ; 12:10 is 12 x 3600 10 x 60, then you do the same thing to your $_POST value, then use gmdate() to retrieve the original format of your array

  $myTimes=array('12:10', '4:16', '2:5');
  //do the math 
  $splittedTime = explode(":", $myTimes[0]); //in your case
  $timeInSeconds = $splittedTime[0] * 3600   $splittedTime[1] * 60 ;
  //do the same thing to your your $_POST value if needed or simply 
  $totalReduceby = 7 * 3600;
   // get new total of seconds
  $newTime= $timeInSeconds - $totalReduceby;
  $result = ltrim(gmdate("H:i", $newTime),0); //ltrim to remove the leading 0
  $myTimes=array($result, '4:16', '2:5');
  //print_r($myTimes);
  • Related