Jawaban:
Gunakan sprintf
:
sprintf('%08d', 1234567);
Atau Anda juga dapat menggunakan str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
mana $i
-12 hingga 12, akan mencetak + atau - sesuai kebutuhan, dan juga akan menempatkan angka nol di depan untuk angka kurang dari 2 digit. Sangat bagus untuk membuat zona waktu SELECT
dalam HTML.
sprintf
( 3v4l.org/junvv/perf#output ) sedikit lebih cepat daripada str_pad
( 3v4l.org/cliNP/perf#output )
Mengingat bahwa nilainya dalam $ value:
Untuk menggemakannya:
printf("%08d", $value);
Untuk mendapatkan:
$formatted_value = sprintf("%08d", $value);
Itu harus melakukan trik
Ketika saya membutuhkan 01 bukannya 1, yang berikut ini berfungsi untuk saya:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
adalah apa yang kamu butuhkan.
EDIT ( entah bagaimana diminta oleh downvotes ), dari halaman yang ditautkan di atas, inilah contoh "bilangan bulat tanpa bantalan":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Jawaban sederhana
$p = 1234567;
$p = sprintf("%08d",$p);
Saya tidak yakin bagaimana menafsirkan komentar yang mengatakan "Itu tidak akan pernah lebih dari 8 digit" dan jika itu mengacu pada input atau output. Jika mengacu pada output, Anda harus memiliki panggilan substr () tambahan untuk klip string.
Untuk memotong 8 digit pertama
$p = substr(sprintf('%08d', $p),0,8);
Untuk memotong 8 digit terakhir
$p = substr(sprintf('%08d', $p),-8,8);
Jika nomor input selalu 7 atau 8 digit, Anda juga dapat menggunakan
$str = ($input < 10000000) ? 0 . $input : $input;
Saya menjalankan beberapa tes dan mendapatkan bahwa ini akan menjadi dua kali lipat secepat str_pad
atau sprintf
.
Jika input bisa memiliki panjang, maka Anda juga bisa menggunakan
$str = substr('00000000' . $input, -8);
Ini tidak secepat yang lain, tetapi juga harus sedikit lebih cepat daripada str_pad
dan sprintf
.
Btw: Tes saya juga mengatakan itu sprintf
sedikit lebih cepat daripada str_pad
. Saya membuat semua tes dengan PHP 5.6.
Sunting: Walaupun substr
versinya tampaknya masih sangat cepat (PHP 7.2), versi ini juga rusak jika input Anda bisa lebih panjang dari panjang yang ingin Anda pad. Misalnya Anda ingin substr('0000' . '1234', -3) = '234'
menambahkan 3 digit dan input Anda memiliki 4 daripada hanya akan menghasilkan 3 digit terakhir
$
saya baru saja memperbaiki)
Saya menulis fungsi sederhana ini untuk menghasilkan format ini: 01:00:03
Detik selalu ditampilkan (bahkan jika nol). Menit ditampilkan jika lebih besar dari nol atau jika diperlukan jam atau hari. Jam ditampilkan jika lebih besar dari nol atau jika hari diperlukan. Hari ditampilkan jika lebih besar dari nol.
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
Contoh:
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
Ini bekerja dengan sempurna:
$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