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

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

trupix 05-11-11 18:08

PHPאיך לוקחים יום אחורה מתאריך מסויים?
 
הי

דיסקסתי כבר פה על משהו דומה. אני גרוע בכל העסק הזה של התאריכים|קורץ|

בכל אופן, כיצד ניתן לדעת מהו יום אחד לפני התאריך x?
יש לציין כי התאריך הנוכחי יהיה:
קוד:

$now = GET["date"];
לדוגמא, אם now=1.1.11, אני רוצה שתיהיה תוצאה של יום אחד לפני

רב תודות ושבוע טוב

Tal. 05-11-11 19:28

PHP קוד:

$Nnow=strtotime($now);

$yesterday=date('d-m-Y',strtotime('-1 day',$Nnow)); 


trupix 05-11-11 23:44

הי,

הקוד לא עובד

אין שגיאה, אבל הקוד לא מזהה שהתאריך הנוכחי הוא זה שהזנתי

ציטוט:

נכתב במקור על ידי Youtube4Down.com (פרסם 824156)
PHP קוד:

$Nnow=strtotime($now);

$yesterday=date('d-m-Y',strtotime('-1 day',$Nnow)); 



עריכה:
אוקי הבנתי למה. צריך להזין 2011 במקום 11. אבל זה לא כל כך טוב לי משום שבאתר אני משתמש בתאריך המקוצר (j.n.y)

זה לא עובד:
PHP קוד:

$now=strtotime("1.11.11");
$yesterday=date('j.n.y',strtotime('-1 day',$now));  

echo 
$yesterday
//הפלט - 4.11.11 

אולם כשאני מציב 2011 במקום 11, זה כן עובד
מה אפשר לעשות?

אדיר 06-11-11 01:01

זה הפורמט שהפונקציה מצפה לקבל, זאת הסיבה שהיא מצליחה לפענח אותו ולא את מה שהכנסת בהתחלה.

הפתרון הפשוט והיעיל ביותר הוא לעבוד עם timestamps,
ברגע שאתה עובד עם timestamp אתה יכול להמיר אותו להציג אותו בכל צורה שתרצה -
כאן עם שנה ב- 2 ספרות, שם עם שנה ב- 4 ספרות ובמקום אחר אפילו בלי שנה בכלל, ממש איך שמתאים לך ואיפה שמתאים לך.

trupix 06-11-11 01:02

אתה מתכוון עם פונקציית הtimestamp בMYSQL?

אדיר 06-11-11 01:07

אם התאריך נשמר במסד, אז כן.
אתה יכול ליצור שדה מסוג TIMESTAMP, להגדיר לו ערך ברירת מחדל כ- CURRENT_TIMESTAMP, וברגע הזנת הנתונים לא להכניס לו כלום והוא ימלא את השדה הזה לבד.
עכשיו כל פעם שאתה רוצה להציג את התאריך, אתה יכול לשלוף אותו לבצע את ההמרה ב- PHP, או לשלוף אותו ישר בפורמט שאתה רוצה באמצעות הפונקציה DATE_FORMAT ב- MySQL.

trupix 06-11-11 01:09

אוקי תודה..

Tal. 06-11-11 01:34

בטח שהוא לא קיבל שנה בשני ספרות. זה מחשב, אולי לך זה נראה ברור שכשאתה רושם 11 אתה מתכוון ל2011 אבל בשביל המחשב יכול כל שנה (שנגמרת ב11).
בתור פלט זה לא בעיה שני ספרות - הוא פשוט מוריד את 2 הספרות הראשונות, בתור קלט זה בלתי אפשרי.

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

אתה יכול "להמיר" את זה לבד, פשוט אם השנה קטנה מ50 תוסיף '20' לשנה אם גדולה תוסיף 19.
נכון זה פתרון לא מקצועי אבל כבר לשלוח שנה בשני ספרות זה לא מקצועי. מקסימום יהיה לך באג 3000, בקטנה. :)

תדע לעבוד תמיד עם שנה ב4 ספרות.

trupix 06-11-11 02:01

חח אני מניח שאתה צודק חבריקו

|קורץ|

ציטוט:

נכתב במקור על ידי Youtube4Down.com (פרסם 824204)
בטח שהוא לא קיבל שנה בשני ספרות. זה מחשב, אולי לך זה נראה ברור שכשאתה רושם 11 אתה מתכוון ל2011 אבל בשביל המחשב יכול כל שנה (שנגמרת ב11).
בתור פלט זה לא בעיה שני ספרות - הוא פשוט מוריד את 2 הספרות הראשונות, בתור קלט זה בלתי אפשרי.

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

אתה יכול "להמיר" את זה לבד, פשוט אם השנה קטנה מ50 תוסיף '20' לשנה אם גדולה תוסיף 19.
נכון זה פתרון לא מקצועי אבל כבר לשלוח שנה בשני ספרות זה לא מקצועי. מקסימום יהיה לך באג 3000, בקטנה. :)

תדע לעבוד תמיד עם שנה ב4 ספרות.


אדיר 06-11-11 02:34

Youtube4Down.com:
"המחשב" כפי שאתה מתאר יכול ויודע לקבל שנה ב- 2 ספרות בלי שום בעיה - כל עוד זה מתוכנן להיות כך.
הוא לא מוריד 2 ספרות מההתחלה - הוא יודע לעבוד ככה וזהו.

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

הפתרון המקובל והפתרון האידיאלי היא הפתרון שציינתי,
כשיש לך חותמת זמן (timestamp), אין פה שום מקום לטעויות - אתה יכול להציג אותה איך שבא לך בלי שום חישובים והמרות מיותרות כמו זו שציינת.


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

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