Yanıtlar:
Kullanım sprintf
:
sprintf('%08d', 1234567);
Alternatif olarak şunları da kullanabilirsiniz str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
yerde $i
, + veya - gerektiği gibi yazdıracağını ve ayrıca 2 basamaktan küçük sayılar için önde gelen sıfırları koyacağını eklemek istedim. SELECT
HTML'de saat dilimi oluşturmak için harika .
sprintf
( 3v4l.org/junvv/perf#output ) biraz daha hızlı olduğu str_pad
( 3v4l.org/cliNP/perf#output )
Değerin $ değerinde olduğu düşünüldüğünde:
Yankılamak için:
printf("%08d", $value);
Onu almak için:
$formatted_value = sprintf("%08d", $value);
Hile yapmalı
1 yerine 01'e ihtiyacım olduğunda, aşağıdakiler benim için çalıştı:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
ihtiyacınız olan şey bu.
EDIT (bir şekilde downvotes tarafından talep edildi ), yukarıda bağlantılı sayfadan, örnek olarak "sıfır dolgulu tamsayılar":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Basit cevap
$p = 1234567;
$p = sprintf("%08d",$p);
"Asla 8 basamaktan fazla olmayacak" diyen yorumu nasıl yorumlayacağından emin değilim ve girdiye veya çıktıya atıfta bulunuyorsa. Çıktıya başvuruyorsa, dizeyi kırpmak için ek bir substr () çağrısı yapmanız gerekir.
İlk 8 basamağı kırpmak için
$p = substr(sprintf('%08d', $p),0,8);
Son 8 haneyi kırpmak için
$p = substr(sprintf('%08d', $p),-8,8);
Giriş numaralarında her zaman 7 veya 8 basamak varsa,
$str = ($input < 10000000) ? 0 . $input : $input;
Bazı testler yaptım ve bunun str_pad
ya da iki katı kadar hızlı olacağını anladım sprintf
.
Girişin herhangi bir uzunluğu olabilirse,
$str = substr('00000000' . $input, -8);
Bu kadar hızlı Diğeri kadar değil, ama aynı zamanda biraz daha hızlı olmalı str_pad
ve sprintf
.
Btw: Testim ayrıca sprintf
bunun biraz daha hızlı olduğunu söyledi str_pad
. Tüm testleri PHP 5.6 ile yaptım.
Düzenleme: Taşıyamazsınız substr
sürümü hala çok hızlı (PHP 7.2), aynı zamanda durumunda bozuldu gibi görünüyor girişinizi ne kadar uzun süre için ped istediğiniz uzunluğundan daha olabilir. Örneğin, 3 basamağa geçmek istiyorsunuz ve girişinizde substr('0000' . '1234', -3) = '234'
yalnızca son 3 basamakla sonuçlanacak 4 sayı var
$
ben sadece sabit)
Bu biçimi üretmek için bu basit işlevi yazdım: 01:00:03
Saniye her zaman gösterilir (sıfır olsa bile). Sıfırdan büyükse veya saat veya gün gerekirse dakika gösterilir. Sıfırdan büyükse veya gün gerekiyorsa saatler gösterilir. Sıfırdan büyükse günler gösterilir.
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
Örnekler:
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
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