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

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

Haimz 22-12-10 13:17

חישוב כמות הימים עד היום הולדת הבא
 
אוקי אני מנסה כבר כמה זמן,
והגעתי לתוצאה כזאת:
PHP קוד:

<?php
    $day 
= @htmlspecialchars($_GET['day']);
    if(
$day)
    {
        list(
$day$month$year) = explode("/"$day);
        
$mkt mktime(000$day$month$year);
        
$tim time();
        
$age date("Y") - $year;
        
$math round(time() - $mkt);
        
$final ceil((($month || $day 0) ? $math 365 $math 1) / 86400);
        
$finalResult round($final - ($age 365));
        echo 
"<strong>" $finalResult " Days.<br /> your " .$age" years old.</strong>";
    }
?>

אני יודע שזה לא נכון ..
אבל אני לא יודע מה הטעות שלי ..
תודה לעזורים, אגב אני בטוח שאני קרוב

BlueNosE 22-12-10 15:33

אני לא בטוח מה הולך פה, אבל הפרמטרים של mktime הם seconds,minutes,hours,month,day,year, לא day,month,year.

Haimz 22-12-10 16:58

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

אך הייתי רוצה לראות עוד דוגמאות (בטוח שיש)

Shay Ben Moshe 22-12-10 20:35

הכי פשוט, הכי חכם, הכי יעיל (הורדתי את הקטע של ההצבה של הגיל במשתנה, ושל החישוב בימים במשתנה, ניתן להוסיף את זה):
PHP קוד:

<?php
if(isset($_GET['dob'])) {
    
$dob explode('/'$_GET['dob']);
    
$time_to_birthday mktime(000$dob[1], $dob[0], date('Y')) - time();
    if(
$time_to_birthday <= 0)
        
$time_to_birthday += 86400 365;
    echo 
'<strong>'.ceil($time_to_birthday 86400).' days are left until your next birthday. You are '.(date('Y') - $dob[2]).' years old.</strong>';
}

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

בהצלחה

Haimz 23-12-10 07:49

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


עריכה:
הבנתי איך זה הולך :)
תודה שי
אפשר לנעול

Itay 23-12-10 23:31

מה יש לכם? למה להסתבך עם כל החישובים הארוכים פה?
יש לך את הפונקציה strtotime - תכניס לה איזה מבנה תאריך שתרצה, ופשוט תוריד מה-time הנוכחי
משו כזה:
PHP קוד:

$time ceil((time() - strtotime($_GET['date'])) / (60*60*24)); 


BlueNosE 24-12-10 15:01

ציטוט:

נכתב במקור על ידי Itay (פרסם 790359)
מה יש לכם? למה להסתבך עם כל החישובים הארוכים פה?
יש לך את הפונקציה strtotime - תכניס לה איזה מבנה תאריך שתרצה, ופשוט תוריד מה-time הנוכחי
משו כזה:
PHP קוד:

$time ceil((time() - strtotime($_GET['date'])) / (60*60*24)); 


אתה לא יודע בכלל כמה הפונקציה הזאת אוהבת לאכול לך את המשאבים.
היא אחת הפונקציות היותר בזבזניות שקיימות, ואתה מוזמן לחפש על זה עוד מידע ולהבין למה עדיף להשתמש בmktime.

Itay 24-12-10 17:18

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 790405)
אתה לא יודע בכלל כמה הפונקציה הזאת אוהבת לאכול לך את המשאבים.
היא אחת הפונקציות היותר בזבזניות שקיימות, ואתה מוזמן לחפש על זה עוד מידע ולהבין למה עדיף להשתמש בmktime.

ברור שהיא אוכלת משאבים, אני לא מצפה מפונקציה שאני יכול להגיד לה "שעה 3 וחצי עוד שבועיים" שהיא תיתן לי תשובה בלי הרבה זמן עיבוד ומשאבים, אבל ברוב המקרים זה לא כזה משנה - אם זה בעמוד שנכנסים אליו מאות אלפים ביום אז הייתי אומר בסדר, אבל עד אז - זאת אחלה של פונקציה שהיעילות שלה במקרה הזה לא כ"כ משנה

BlueNosE 24-12-10 18:14

ציטוט:

נכתב במקור על ידי Itay (פרסם 790428)
ברור שהיא אוכלת משאבים, אני לא מצפה מפונקציה שאני יכול להגיד לה "שעה 3 וחצי עוד שבועיים" שהיא תיתן לי תשובה בלי הרבה זמן עיבוד ומשאבים, אבל ברוב המקרים זה לא כזה משנה - אם זה בעמוד שנכנסים אליו מאות אלפים ביום אז הייתי אומר בסדר, אבל עד אז - זאת אחלה של פונקציה שהיעילות שלה במקרה הזה לא כ"כ משנה

איך אתה יכול לומר דבר כזה? זה רק משיקולי עצלנות. מה כל כך קשה להמיר את "3:30 עוד שבועיים" ל"time() + שבועיים" -> "מה הנק' זמן באותו יום בשעה 3:30"? החסכון משמעותי והשינוי לא גדול.

Shay Ben Moshe 24-12-10 19:43

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


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

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