Search code examples
phplaravelphp-carbongoogle-my-business-api

Convert google TimeOfDay object to string in laravel - php


I'm working with timePeriod object with gmb library

I receive this response

0 => array:3 [▼
  "weekday" => "SUNDAY"
  "start_time" => {#11764 ▼
    +"hours": 10
  }
  "end_time" => {#11740 ▼
    +"hours": 21
  }
]

start_time and end_time key can have

{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}

I want to format that time to this format:

0 => array:3 [▼
    "weekday" => "SUNDAY"
    "start_time" => "10:00"
    "end_time" => "21:00"
  ]

Sometimes I get an empty array in start_time or close_time because it represent 0 hours (midnight)

0 => array:3 [▼
"weekday" => "SUNDAY"
"start_time" => []
"end_time" => {#13543 ▼
  +"hours": 24
}
]

I want to transform that to:

0 => array:3 [▼
"weekday" => "SUNDAY"
"start_time" => "00:00"
"end_time" => "24:00"
]

It is possible by using carbon?


Solution

  • Carbon won't be needed, it's fairly easy to do with pure PHP:

    $data = [
      "weekday" => "SUNDAY",
      "end_time" => (object) ["hours" => 10],
      "start_time" => (object) ["hours" => 21],
    ];
    $data['start_time'] = str_pad($data['start_time']->hours ?? 0, 2, '0', STR_PAD_LEFT) . ':' .
        str_pad($data['start_time']->minutes ?? 0, 2, '0', STR_PAD_LEFT);
    $data['end_time'] = str_pad($data['end_time']->hours ?? 0, 2, '0', STR_PAD_LEFT) . ':' .
        str_pad($data['end_time']->minutes ?? 0, 2, '0', STR_PAD_LEFT);
    

    Value of $data is now:

    [
      "weekday" => "SUNDAY"
      "end_time" => "10:00"
      "start_time" => "21:00"
    ]
    

    It is for hours:minutes as asked in your post, but it can have also seconds and nanoseconds following the same principle.