הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   חישוב שעות מתמטי? php/js (https://hosts.co.il/forums/showthread.php?t=93144)

trupix 31-10-11 03:31

חישוב שעות מתמטי? php/js
 
הי!

מצאתי משהו קצת מאתגר ואני די מתקשה פה במציאת פיתרון.

אני מנסה לדעת כמה פעמים נכנסים 45 דקות, בסכום השעות שבין 08:10 - 17:20

נראה לי שהבנתי את סדר הפעולות, אך עם זאת אינני מצליח לגלות את הנוסחה לשם כך.

זו רק השערה, אך אני חושב שסדר הפעולות הוא:

1. חישוב מספר השעות שבין 08:10 - 17:20
2. הכפלת התוצאה ב60
3. חילוק התוצאה ב45

לא משנה אם הפתרון יהיה בJS\PHP, אך שעדיף שיהיה בPHP..

יש למישהו מושג?
אני מקווה בכלל שמישהו הבין ;-( קצת קשה לי להסביר את זה
יכול להיות בכלל שהתשובה כל כך פשוטה, שהשעה המאוד מאוחרת כרגע מערפלת לי אותה :S

Xinxy 31-10-11 07:46

מה שאמרת נכון, הכפלה ב60 תהפוך את השעות לדקות, חילוק ב45 יתן לך כמה פעמים 45 נכנס בדקות הללו, אם אתה רוצה גם התייחסות לדקות אתה עושה את ההפרש ביניהן ומוסיף לתוצאת הכפל שלך

daNN 31-10-11 10:28

JavaScript:
קוד:

        <script type="text/javascript">
                var hour1 = new Date(); // התאריך הנוכחי
                var hour2 = new Date(); // התאריך הנוכחי
               
                hour1.setHours(20); // אתחול השעה
                hour1.setMinutes(45); // אתחול הדקות
               
                hour2.setHours(18); // אתחול השעה
                hour2.setMinutes(45); // אתחול הדקות
               
                var diff = Math.abs( hour1 - hour2 ); // ערך אבסולוטי של ההפרש
               
                document.write(diff/1000/60/45);
        </script>

Php:
קוד:

        <?php
                $hour1 = mktime(20,45,0,0,0,0);
                $hour2 = mktime(18,45,0,0,0,0);
               
                $diff = abs($hour1 - $hour2);
               
                echo $diff/60/45;
        ?>


trupix 31-10-11 13:41

תודה רבה ידידי!

ציטוט:

נכתב במקור על ידי daNN (פרסם 823671)
JavaScript:
קוד:

        <script type="text/javascript">
                var hour1 = new Date(); // התאריך הנוכחי
                var hour2 = new Date(); // התאריך הנוכחי
               
                hour1.setHours(20); // אתחול השעה
                hour1.setMinutes(45); // אתחול הדקות
               
                hour2.setHours(18); // אתחול השעה
                hour2.setMinutes(45); // אתחול הדקות
               
                var diff = Math.abs( hour1 - hour2 ); // ערך אבסולוטי של ההפרש
               
                document.write(diff/1000/60/45);
        </script>

Php:
קוד:

        <?php
                $hour1 = mktime(20,45,0,0,0,0);
                $hour2 = mktime(18,45,0,0,0,0);
               
                $diff = abs($hour1 - $hour2);
               
                echo $diff/60/45;
        ?>



trupix 31-10-11 14:01

הקוד לא עובד :(

הוא מציג נתון לא הגיוני


קוד:

        <?php
                $hour1 = mktime(08,30,0,0,0,0);
                $hour2 = mktime(16,45,0,0,0,0);
               
                $diff = abs($hour1 - $hour2);
               
                echo $diff/60/45;
        ?>

שים לב ששיניתי את הנתונים
תחילת ספירה מ08:30 בבוקר, וסיום ב16:45

הקוד הנ"ל מציג את התוצאה 21.6666666667, כשלמעשה התשובה היא 12

daNN 31-10-11 15:46

PHP מתייחסת למספרים שמתחילים ב0 כמספרים בבסיס 8.
פשוט שנה את 08 ל8...

trupix 31-10-11 18:08

צדקת. הוספת הסיפרה 0 גרמה לפונקציה "להתבלבל". הורדתי את ה0 וכעת הותצאה זהה לקוד הJS. תודה.

עם זאת אינני מצליח להסתדר בבניית המערכת.


המטרה שלי היא כזאת:

אני נותן לגולש לבחור שעת התחלה,(נניח 8:30) ושעת סיום (נניח 17:45)

עכשיו אני רוצה להציג רשימה עם כל השעות האלו, במרווח של 45 דקות (המרווח משתנה עפ"י הגולש)

כלומר שתיהיה בסוף רשימה כזאת:

8:30
9:15
10:00
...
...
17:45

אז הצלחתי ליצור לולאה באורך של deff שנתת, אבל אין לי מושג איך לפלוט את השעות במרווח שהמשתמש הזין

בתקווה שהצלחתי להסביר כמו שצריך, ובהערכה רבה.
תודה.

daNN 31-10-11 18:24

קודם כל הספרה 0 לא גרמה לפונקציה להתבלבל...
תיכנות זה דבר קבוע והמחשב ממש לא מתבלבל.
ציון הספרה 0 לפני מספר גורמת לPHP לחשוב שהמספר הוא בבסיס 8. (ולא בבסיס 10 שאנחנו רגילים אליו מחיי היום יום).

דבר שני תעשה לולאה שתקפוץ ב45 דק' כל פעם לא הבנתי מה הבעיה.. ?
תחקור על הפונקציות mktime,Date,strtotime בPhp
זה אמור להסביר איך להקפיץ את הזמן ב45 דקות כל פעם..

Itay 31-10-11 20:06

לא הכי יעיל, אבל עושה את העבודה בצורה פשוטה
PHP קוד:

<?php
$startTime 
strtotime("8:30"); // אתה מגדיר זמן התחלה בפורמט יוניקס
$endTime strtotime("17:45"); // כנ"ל לגבי זמן סיום
for($i=$startTime;$i<=$endTime;$i+=(45*60)) // אתה מריץ לולאה מהזמן התחלה עד שהאינדקס קטן או שווה לזמן סיום, ומעלה כל פעם ב-45 דקות (החישוב הוא בשניות)
{
    echo 
date("H:i",$i).'<br />'// מציג את השעה והדקות מהתאריך
}
?>



כל הזמנים הם GMT +2. הזמן כעת הוא 23:33.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ