如何将工作时间数组转换为24小时格式



我在PHP中有一组这样的数组。

["Monday"]=> string(7) "8AM-4PM" 
["Tuesday"]=> string(7) "8AM-4PM" 
["Wednesday"]=> string(7) "8AM-4PM" 
["Thursday"]=> string(7) "8AM-4PM" 
["Friday"]=> string(6) "Closed" 
["Saturday"]=> string(7) "8AM-4PM" 
["Sunday"]=> string(7) "8AM-4PM" }

如何将小时转换为24小时格式?

首先,您必须循环遍历您的数组,然后您必须检查该值是否具有AM或PM,因为我们不想转换Closed,然后您将不得不通过&quot-&quot然后获得一个时间数组并循环通过它,然后使用datestrtotime函数将其转换为24小时时间,然后使用"-">再次。

这是工作代码:

// Define data.
$data = array(
'Monday'    => '8AM-4PM',
'Tuesday'   => '8AM-4PM',
'Wednesday' => '8AM-4PM',
'Thursday'  => '8AM-4PM',
'Friday'    => 'Closed',
'Saturday'  => '8AM-4PM',
'Sunday'    => '8AM-4PM',
);
// Creaye empty array to store transformed data.
$new_data = array();
// Loop through data.
foreach ( $data as $key => $value ) {
// Check if the value has am or pm
if ( strpos( strtolower( $value ), 'am' ) !== false || strpos( strtolower( $value ), 'pm' ) !== false ) {
// split time from "-"
$times = explode( '-', $value );
// create an empty array to store transformed time.
$new_times = array();
// loop through times array.
foreach ( $times as $time ) {
// convert to 24 format.
$new_times[] = date( 'HA', strtotime( $time ) );
}
// join the transformed times array with "-"
// and store in new data.
$new_data[ $key ] = join( '-', $new_times );
} else {
// if the value has no am or pm, just store it.
$new_data[ $key ] = $value;
}
}
var_dump( $new_data );

这是相同内容的较短版本,但您可能很难理解

// Define data.
$data = array(
'Monday'    => '8AM-4PM',
'Tuesday'   => '8AM-4PM',
'Wednesday' => '8AM-4PM',
'Thursday'  => '8AM-4PM',
'Friday'    => 'Closed',
'Saturday'  => '8AM-4PM',
'Sunday'    => '8AM-4PM',
);
$data = array_map(
function( $value ) {
return strpos( strtolower( $value ), 'am' ) !== false || strpos( strtolower( $value ), 'pm' ) !== false ? join(
'-',
array_map(
function( $time ) {
return date( 'HA', strtotime( $time ) );
},
explode( '-', $value )
)
) : $value;
},
$data
);
var_dump( $data );

PHP具有易于使用的日期和字符串格式函数。

这会在数组上循环,并分割时间并重新格式化

$times = [
'Monday'    => '8AM-4PM',
'Tuesday'   => '8AM-4PM',
'Wednesday' => '8AM-4PM',
'Thursday'  => '8AM-4PM',
'Friday'    => 'Closed',
'Saturday'  => '8AM-4PM',
'Sunday'    => '8AM-4PM',
];
$time24 = [];
foreach ($times as $day => $time) {
[$from, $to] = explode('-', $time);
$time24[$day] = null === $to
? $from
: sprintf('%02d:00-%02d:00', date('H', strtotime($from)), date('H', strtotime($to)));
}
print_r($time24);

输出

Array
(
[Monday]    => 08:00-16:00
[Tuesday]   => 08:00-16:00
[Wednesday] => 08:00-16:00
[Thursday]  => 08:00-16:00
[Friday]    => Closed
[Saturday]  => 08:00-16:00
[Sunday]    => 08:00-16:00
)

最新更新