10. februar 2004 - 09:33
Der er
22 kommentarer og 1 løsning
Vrøvl med datoer
Dette stykke kode: $Months = array("", "Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"); $Days = array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"); $CreateDate = $row[foedselsdato]; list ($CreateYear, $CreateMonth, $CreateDay) = explode ("-", $CreateDate); $Dato = mktime(0, 0, 0, $CreateMonth, $CreateDay, $CreateYear); $MonthName = $Months[intval($CreateMonth)]; $DayName = $Days[date("w", $Dato)]; $MonthDay = date("j", $Dato); $datostr = "$DayName d. $MonthDay. $MonthName $CreateYear"; giver hvis man fodrer det med 1977-07-28 rigtigt nok Torsdag d. 28. Juli 1977, men fodrer man det med 1949-04-27, så skriver den Torsdag d. 1. April 1949. Er der nogen, der kan regne det ud? Den laver samme problem med andre datoer også.
Annonceindlæg fra Sabio
10. februar 2004 - 10:15
#1
Denne linie $Dato = mktime(0, 0, 0, $CreateMonth, $CreateDay, $CreateYear); returnerer -1 med datoen i 1949.
10. februar 2004 - 10:17
#2
Kan problemet være, at vi har at gøre med en dato før 1. januar 1970?
10. februar 2004 - 11:24
#3
Ja, det har du nok ret i. mktime() returnerer jo kun timestamps fra 1/1 1970.
10. februar 2004 - 11:34
#4
I øvrigt kan din kode minimeres til: $CreateDate = $row['foedselsdato']; setlocale(LC_ALL, "danish"); $datostr = strftime("%A d. %d. %B %Y", strtotime($CreateDate));
10. februar 2004 - 11:40
#5
Kan den lille kode så benyttes til datoer før 1970?
10. februar 2004 - 11:49
#6
Nej, du løber ind i de samme begrænsninger vedr. timestamps, hvilket er bestemt af dit styresystem.
10. februar 2004 - 12:00
#7
Okay. Jeg finder en anden måde at vise fødselsdatoer på så.
10. februar 2004 - 12:12
#8
Du kan måske bruge nogle cal funktioner. Fx: $Months = array("Jan"=>"Januar", "Feb"=>"Februar", "Mar"=>"Marts", "Apr"=>"April", "May"=>"Maj", "Jun"=>"Juni", "Jul"=>"Juli", "Aug"=>"August", "Sep"=>"September", "Oct"=>"Oktober", "Nov"=>"November", "Dec"=>"December"); $Days = array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"); $CreateDate = "1949-04-27"; list ($CreateYear, $CreateMonth, $CreateDay) = explode ("-", $CreateDate); $jd = GregorianToJD($CreateMonth, $CreateDay, $CreateYear); $MonthName = $Months[JDMonthName($jd,0)]; $DayName = $Days[JDDayOfWeek($jd,0)]; $datostr = "$DayName d. $CreateDay. $MonthName $CreateYear";
10. februar 2004 - 12:13
#9
Det giver så: "Onsdag d. 27. April 1949", om det så er korrekt ved jeg ikke?
10. februar 2004 - 15:02
#10
Smid et svar, så får du lidt points.
10. februar 2004 - 15:22
#11
Kan du bruge det?
10. februar 2004 - 16:35
#12
Nej, den broker sig over det der GregoriantoJD
10. februar 2004 - 16:47
#13
Jeg fandt dette: function GregorianToJD ($month,$day,$year) { if ($month > 2) { $month = $month - 3; } else { $month = $month + 9; $year = $year - 1; } $c = floor($year / 100); $ya = $year - (100 * $c); $j = floor((146097 * $c) / 4); $j += floor((1461 * $ya)/4); $j += floor(((153 * $month) + 2) / 5); $j += $day + 1721119; return $j; } på php.net, men det vil ikke helt som jeg vil.
10. februar 2004 - 16:56
#14
Hvis du bruger linux, skal du huske: --enable-calendar når du compiler php. Den workarround du har fundet virker ellers osse fint hos mig.
10. februar 2004 - 16:59
#15
jeg bruger ikke linux. Men kan jeg bruge denne funtiokn sammen med dit stykke kode sådan uden videre?
10. februar 2004 - 17:03
#16
I windows burde det virke. Hvad mener du når du siger den brokker sig over funktionen?
10. februar 2004 - 17:04
#17
Ellers kan du sikkert godt indsætte den funktion du har fundet, men så er der vel osse problemer med de andre to funktioner.
10. februar 2004 - 17:05
#18
Dette vil jeg sætte ind i sidens <HEAD> function GregorianToJD ($month,$day,$year) { if ($month > 2) { $month = $month - 3; } else { $month = $month + 9; $year = $year - 1; } $c = floor($year / 100); $ya = $year - (100 * $c); $j = floor((146097 * $c) / 4); $j += floor((1461 * $ya)/4); $j += floor(((153 * $month) + 2) / 5); $j += $day + 1721119; return $j; } og længere nede vil jeg så bruge dette: $Months = array("Jan"=>"Januar", "Feb"=>"Februar", "Mar"=>"Marts", "Apr"=>"April", "May"=>"Maj", "Jun"=>"Juni", "Jul"=>"Juli", "Aug"=>"August", "Sep"=>"September", "Oct"=>"Oktober", "Nov"=>"November", "Dec"=>"December"); $Days = array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"); $CreateDate = "1949-04-27"; list ($CreateYear, $CreateMonth, $CreateDay) = explode ("-", $CreateDate); $jd = GregorianToJD($CreateMonth, $CreateDay, $CreateYear); $MonthName = $Months[JDMonthName($jd,0)]; $DayName = $Days[JDDayOfWeek($jd,0)]; $datostr = "$DayName d. $CreateDay. $MonthName $CreateYear"; Kan jeg det, eller skal der laves noget om?
10. februar 2004 - 17:12
#19
Det er ikke til at sige, når jeg ikke ved, hvad du mener med "den brokker sig". Du er nok nødt til at prøve og se.
10. februar 2004 - 17:18
#20
Fatal error: Call to undefined function: gregoriantojd() in /customers/mctorsdagsklubben.dk/mctorsdagsklubben.dk/httpd.www/medlem/visperson.php on line 34 Linie 34 --> $jd = GregorianToJD($CreateMonth, $CreateDay, $CreateYear);
10. februar 2004 - 17:22
#21
Ja, så må du prøve den workarround, men måske får du så de samme problemer med de to andre funktioner: JDMonthName() og JDDayOfWeek().
10. februar 2004 - 17:23
#22
Okay. Der er ikke noget at gøre ved det. Jeg forsøger, at finde en løsning.
15. februar 2004 - 21:10
#23
Jeg har valgt blot at vise datoerne som 27.04.1949
Vi tilbyder markedets bedste kurser inden for webudvikling