Respuestas:
Uso sprintf
:
sprintf('%08d', 1234567);
Alternativamente, también puede usar str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
donde $i
está -12 a 12, imprimirá + o - según sea necesario, y también pondrá ceros a la izquierda para números de menos de 2 dígitos. Genial para hacer una zona horaria SELECT
en HTML.
sprintf
( 3v4l.org/junvv/perf#output ) es un poco más rápido que str_pad
( 3v4l.org/cliNP/perf#output )
Dado que el valor está en $ value:
Para repetirlo:
printf("%08d", $value);
Para conseguirlo:
$formatted_value = sprintf("%08d", $value);
Eso debería hacer el truco
Cuando necesito 01 en lugar de 1, lo siguiente funcionó para mí:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
es lo que necesitas
EDITAR (de alguna manera solicitado por los votos negativos ), desde la página vinculada anteriormente, aquí hay una muestra de "enteros rellenos con ceros":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Respuesta simple
$p = 1234567;
$p = sprintf("%08d",$p);
No estoy seguro de cómo interpretar el comentario diciendo "Nunca tendrá más de 8 dígitos" y si se refiere a la entrada o la salida. Si se refiere a la salida, tendría que tener una llamada substr () adicional para recortar la cadena.
Para recortar los primeros 8 dígitos
$p = substr(sprintf('%08d', $p),0,8);
Para recortar los últimos 8 dígitos
$p = substr(sprintf('%08d', $p),-8,8);
Si los números de entrada siempre tienen 7 u 8 dígitos, también puede usar
$str = ($input < 10000000) ? 0 . $input : $input;
Realicé algunas pruebas y descubrí que esto sería el doble de rápido str_pad
o sprintf
.
Si la entrada puede tener cualquier longitud, entonces también podría usar
$str = substr('00000000' . $input, -8);
Esto no es tan rápido como el otro, pero también debería ser un poco más rápido que str_pad
y sprintf
.
Por cierto: mi prueba también dijo que sprintf
es un poco más rápido questr_pad
. Hice todas las pruebas con PHP 5.6.
Editar: aunque la substr
versión parece ser aún muy rápida (PHP 7.2), también está rota en caso de que su entrada pueda ser más larga que la longitud que desea rellenar. Por ejemplo, desea rellenar con 3 dígitos y su entrada tiene 4 que substr('0000' . '1234', -3) = '234'
solo darán como resultado los últimos 3 dígitos
$
, acabo de arreglarlo)
Escribí esta función simple para producir este formato: 01:00:03
Los segundos siempre se muestran (incluso si son cero). Los minutos se muestran si son mayores que cero o si se requieren horas o días. Las horas se muestran si son mayores que cero o si se requieren días. Los días se muestran si son mayores que cero.
function formatSeconds($secs) {
$result = '';
$seconds = intval($secs) % 60;
$minutes = (intval($secs) / 60) % 60;
$hours = (intval($secs) / 3600) % 24;
$days = intval(intval($secs) / (3600*24));
if ($days > 0) {
$result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':';
}
if(($hours > 0) || ($result!="")) {
$result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
}
if (($minutes > 0) || ($result!="")) {
$result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
}
//seconds aways shown
$result .= str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $result;
} //funct
Ejemplos:
echo formatSeconds(15); //15
echo formatSeconds(100); //01:40
echo formatSeconds(10800); //03:00:00 (mins shown even if zero)
echo formatSeconds(10000000); //115:17:46:40
$no_of_digit = 10;
$number = 123;
$length = strlen((string)$number);
for($i = $length;$i<$no_of_digit;$i++)
{
$number = '0'.$number;
}
echo $number; /////// result 0000000123
Esto funciona perfectamente:
$number = 13246;
echo sprintf( '%08d', $number );
function duration($time){
$hours = '';
$minutes = '00:';
$seconds = '00';
if($time >= 3600){
//0 - ~ hours
$hours = floor($time / 3600);
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 3600;
}
if($time >= 60){
//0 - 60 minute
$minutes = floor($time / 60);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 60;
}
if($time){
//0 - 60 second
$seconds = str_pad($time, 2, '0', STR_PAD_LEFT);
}
return $hours . $minutes . $seconds;
}
echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20