2012-02-01 12 views
9

मैं एक दशमलव लेने और इसे बदलने की कोशिश कर रहा हूं ताकि मैं इसे घंटों, मिनटों और सेकंड के रूप में गूंज सकूं।दशमलव में समय को कैसे परिवर्तित करें, उदाहरण के लिए। एचएच: एमएम: एसएस

मेरे पास घंटे और मिनट हैं, लेकिन सेकंड खोजने के लिए मेरे दिमाग को तोड़ रहा हूं। बिना किसी किस्मत के थोड़ी देर के लिए googling किया गया। मुझे यकीन है कि यह काफी सरल है, लेकिन मैंने कोशिश की है कि कुछ भी काम नहीं किया है। किसी भी सलाह की सराहना की है!

function convertTime($dec) 
{ 
    $hour = floor($dec); 
    $min = round(60*($dec - $hour)); 
} 

जैसा कि मैंने कहा, मैं इस मुद्दे के बिना घंटे और मिनट मिलता है:

यहाँ मैं क्या है। कुछ कारणों से सेकंड पाने के लिए बस संघर्ष करना।

धन्यवाद!

+0

किस स्वरूप में है कि "दशमलव" क्या है? –

+0

जो आपके पास है वह भी सही नहीं लगता है। क्या आप नमूना इनपुट और अपेक्षित आउटपुट प्रदान कर सकते हैं? – Sorin

+0

दशमलव कुछ खास नहीं है। 5.678 9 1234 की तरह कुछ। – HMFlol

उत्तर

15

तो $dec घंटे में है ($dec के बाद से प्रश्नकर्ता विशेष रूप से एक दिसम्बर IMAL उल्लेख):

function convertTime($dec) 
{ 
    // start by converting to seconds 
    $seconds = ($dec * 3600); 
    // we're given hours, so let's get those the easy way 
    $hours = floor($dec); 
    // since we've "calculated" hours, let's remove them from the seconds variable 
    $seconds -= $hours * 3600; 
    // calculate minutes left 
    $minutes = floor($seconds/60); 
    // remove those from seconds as well 
    $seconds -= $minutes * 60; 
    // return the time formatted HH:MM:SS 
    return lz($hours).":".lz($minutes).":".lz($seconds); 
} 

// lz = leading zero 
function lz($num) 
{ 
    return (strlen($num) < 2) ? "0{$num}" : $num; 
} 
+0

सहायता के लिए धन्यवाद। जो मैं करने की कोशिश कर रहा था उससे ज्यादा समझ में आता है। :) – HMFlol

+0

@ एचएमएफएलओएल: मदद करने में खुशी हुई। – Crontab

+2

'lz' फ़ंक्शन बनाने के बजाय, आप मूल' str_pad' फ़ंक्शन का उपयोग PHP से कर सकते हैं: 'str_pad ($ num, 2, 0, STR_PAD_LEFT)' – elboletaire

0

मुझे यकीन है कि अगर यह यह करने के लिए सबसे अच्छा तरीका है नहीं हूँ, लेकिन

$variabletocutcomputation = 60 * ($dec - $hour); 
$min = round($variabletocutcomputation); 
$sec = round((60*($variabletocutcomputation - $min))); 
7

एक पंक्ति में बहुत ही सरल समाधान:

echo gmdate('H:i:s', floor(5.67891234 * 3600)); 
+4

यह तब तक काम करता है जब तक आपके पास 24 या अधिक घंटे न हों। – Crontab

+0

@Crontab इसके बारे में नहीं सोचा था :) धन्यवाद। – Cheery

+2

क्या इससे कोई फर्क पड़ता है कि आप 'gmdate()' के बजाय 'date()' का उपयोग करते हैं? – Staysee

3

सबकुछ ऊपर से मेरे मामले में काम नहीं किया। मैंने दशमलव समाधान और मिनटों को सामान्य समय प्रारूप में बदलने के लिए उस समाधान का उपयोग किया है। अर्थात

function clockalize($in){ 

    $h = intval($in); 
    $m = round((((($in - $h)/100.0) * 60.0) * 100), 0); 
    if ($m == 60) 
    { 
     $h++; 
     $m = 0; 
    } 
    $retval = sprintf("%02d:%02d", $h, $m); 
    return $retval; 
} 


clockalize("17.5"); // 17:30 
0

यह एक बढ़िया तरीका है और चल बिन्दु परिशुद्धता के साथ समस्याओं से बचा जाता है:

function convertTime($h) { 
    return [floor($h), (floor($h * 60) % 60), floor($h * 3600) % 60]; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे