اخي الحبيب إذا كنت قد وصفت الشخص الذي سيحل هذه المسألة بالعبقري فإن هذا الشخص هو أنت - صفقه لك :app:.
لأنك ببساطة حلتها رياضياً - See..
كل خانة تجمع مع الخانة المماثلة + انها مثل الساعة اي رقم يوصل لاكثر من 60 يذهب للخانة اليسار باستثناء الخانة الاولى المكونة من 3 خانات وهي لتصل الى 999 ثم تقوم بحاسب 1 بالخانة اللي بجانبها والخانة الاخيرة ما يهم لانها لن توصل لاكثر من 60 في كل الحالات وللعلم هذا توقيت خاص ولا يمكن التعديل على شكل الخانات
أما برمجياً .. حضرتك برمجتها - ولكن برمجة بلغة البشرية.
مادام لديك السيناريو فهو بحد ذاته برمجة - إذن لم يتبقى الا كتابة الكود بلغة PHP.
على العموم .. منذ فترة كتبت دالة تحول صيغة الزمن أو فترة زمنية الى :
يعني الزمن ثواني.دقائق.ساعات.أيام.شهور.سنوات
24ساعة = 1 يوم 00 ساعة و 00 دقيقة و 00 ثانية => ( 1000000 )
دالة x2time :
كود PHP:
<?php
/******************************************************************************************************/
/* x2time() Function */
/* دالة x2time : تقوم بإعادة صيغة الزمن المحدد الى صيغة date(ymdHis) */
/* Example : x2time(32.5, 'D') This means 32.5 day || Result : 102120000 */
/* See 1 12 00 00 / 1 This is 1 month and 12 means 12 day (.5 day) , 00 minutes and 00 seconds . */
/* Edited by Mostafa Maher . */
/************************************************************************************************/
function x2time($time, $type) {
function xtime($time, $type) {
if ($type == 'Sec') {
return floor($time);
}elseif ($type == 'Min') {
$dottime = recon_type(floor(($time - floor($time)) * 60), 'Sec');
return (floor($time) * 100) + xtime($dottime['time'], $dottime['type']);
}elseif ($type == 'H') {
$dottime = recon_type(floor(($time - floor($time)) * 60 * 60), 'Sec');
return (floor($time) * 10000) + xtime($dottime['time'], $dottime['type']);
}elseif ($type == 'D') {
$dottime = recon_type(floor(($time - floor($time)) * 60 * 60 * 24), 'Sec');
return (floor($time) * 1000000) + xtime($dottime['time'], $dottime['type']);
}elseif ($type == 'M') {
$dottime = recon_type(floor(($time - floor($time)) * 60 * 60 * 24 * 30), 'Sec');
return (floor($time) * 100000000) + xtime($dottime['time'], $dottime['type']);
}elseif ($type == 'Y') {
$dottime = recon_type(floor(($time - floor($time)) * 60 * 60 * 24 * 30 * 12), 'Sec');
return (floor($time) * 10000000000) + xtime($dottime['time'], $dottime['type']);
}
}
function recon_type($time, $type) {
switch ($type) {
case 'Sec':
if ($time < 60) {
return array('time' => $time, type => 'Sec');
}elseif ($time >= 60 && (60 * 60) > $time) {
return array('time' => ($time / 60), type => 'Min');
}elseif ($time >= (60 * 60) && (60 * 60 * 24) > $time) {
return array ('time' => ($time / (60 * 60)), type => 'H');
}elseif ($time >= (60 * 60 * 24) && (60 * 60 * 24 * 30) > $time) {
return array ('time' => ($time / (60 * 60 * 24)), type => 'D');
}elseif ($time >= (60 * 60 * 24 * 30) && (60 * 60 * 24 * 30 * 12) > $time) {
return array ('time' => ($time / (60 * 60 * 24 * 30)), type => 'M');
}elseif ((60 * 60 * 24 * 30 * 12) <= $time) {
return array ('time' => ($time / (60 * 60 * 24 * 30 * 12)), type => 'Y');
}
break;
case 'Min':
if ($time < 60) {
return array('time' => $time, type => 'Min');
}elseif ($time >= 60 && (60 * 24) > $time) {
return array('time' => ($time / 60), type => 'H');
}elseif ($time >= (60 * 24) && (60 * 24 * 30) > $time) {
return array ('time' => ($time / (60 * 24)), type => 'D');
}elseif ($time >= (60 * 24 * 30) && (60 * 24 * 30 * 12) > $time) {
return array ('time' => ($time / (60 * 24 * 30)), type => 'M');
}elseif ((60 * 24 * 30 * 12) <= $time) {
return array ('time' => ($time / (60 * 24 * 30 * 12)), type => 'Y');
}
break;
case 'H':
if ($time < 24) {
return array('time' => $time, type => 'H');
}elseif ($time >= 24 && (24 * 30) > $time) {
return array ('time' => ($time / 24), type => 'D');
}elseif ($time >= (24 * 30) && (24 * 30 * 12) > $time) {
return array ('time' => ($time / (24 * 30)), type => 'M');
}elseif ((24 * 30 * 12) <= $time) {
return array ('time' => ($time / (24 * 30 * 12)), type => 'Y');
}
break;
case 'D':
if ($time < 30) {
return array('time' => $time, type => 'D');
}elseif ($time >= 30 && (30 * 12) > $time) {
return array ('time' => ($time / 30), type => 'M');
}elseif ((30 * 12) <= $time) {
return array ('time' => ($time / (30 * 12)), type => 'Y');
}
break;
case 'M':
if ($time < 12) {
return array('time' => $time, type => 'M');
}elseif ( 12 <= $time) {
return array ('time' => ($time / 12), type => 'Y');
}
break;
case 'Y':
return array('time' => $time, type => 'Y');
}
}
$ytime = recon_type($time, $type);
return xtime($ytime['time'], $ytime['type']);
}
// إختبار الدالة
//echo x2time(32.25, 'D');
?>
إذا أردت تحويل 78032 دقيقة الى الصيغة ymdHis ستستدعى الدالة كالتالي :
كود PHP:
x2time(78032, 'Min');
حيث Sec ثانية و Min دقيقة و H ساعة و D يوم و M شهر و Y سنة .
على الفكرة الدالة ليست دقيقة 100% .
32 يوم - يعني 00 00 00 02 1 - لكن الدالة ستعطيك 58 59 23 01 1 ( فرق 2ثانية)
أنا عارف ان الدالة دي - مش هي اللي أنت عايزها .
لكن - See
01:00:37,070
+
00:02:00,000
=
01:02:37:070
لو
01:00:37,070 ترجع لصيغة واحدة ( أيام ) x.xx
+
00:02:00,000 ترجع لصيغة واحدة ( أيام y.yy )
=
كود PHP:
x2time(x.xx + y.yy, 'D');
-------------------------------------------
ممكن تكون هناك طريقة اسهل بكثير - لكن انا تركيزي دلوقتي 0 - :con2:
بالتوفيق ،،،