Typ Deines phpBB Forums: Standard phpBB (auch Vanilla genannt)
MODs: Ja
Dein Wissensstand: Fortgeschritten
Link zu Deinem Forum: http://support.schmidtedv.de
PHP Version:
MySQL Version:
Was hast Du gemacht, bevor das Problem aufgetreten ist?
den MOD noch nicht installiert, höhö
Was hast Du bereits versucht um das Problem zu lösen?
viel :-)
Fehlerbeschreibung und Nachricht
So, mal eine Bitte die soooo schwer doch eigentlich nicht zu lösen sein kann:
die function mydateformat reagiert ja empfindlich auf die Zeitzone (hat sie, wie ich inzwischen suchend feststellen durfte, schon immer)...dennoch, zumindest die function cal_create_date habe ich mir inzwischen korrigiert (zumindest glaube ich das).
Original cal_lite_functions.php:
Code: Alles auswählen
function cal_create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}Code: Alles auswählen
function cal_create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
}Code: Alles auswählen
return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone'])), $translate) : @gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone']));Code: Alles auswählen
return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time ), $translate) : @gmdate($dateformat, $gmt_time );Der gesamte aufbau der function mydateformat im Original ist hier
Code: Alles auswählen
function mydateformat($thisdate, $dateformat='d M Y G:i', $span=0)
{
global $cal_config, $lang, $board_config, $userdata;
if (!empty($cal_config['cal_dateformat'])) {
$dateformat = $cal_config['cal_dateformat'];
} elseif (empty($dateformat)) {
$dateformat = 'd M Y G:i'; // MOD set to default as it's most likely this.
}
if ( !empty($userdata['user_lang'])) {
$board_config['default_lang'] = $userdata['user_lang'];
}
// date comes in as the following:
$myr = substr($thisdate, 0, 4);
$mym = substr($thisdate, 5, 2);
$myd = substr($thisdate, 8, 2);
$myh = substr($thisdate, 11, 2);
$myn = substr($thisdate, 14, 2);
$mys = substr($thisdate, 17, 2);
if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
// Need to strip out any TIME references so...
$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
while (list(,$val) = each ($timerefs))
{
$dateformat = ereg_replace($val, "", $dateformat);
}
// strip out any characters used for time
$dateformat = ereg_replace('[:\.]', " ", $dateformat);
}
// Adjust for the timezone
if ( $userdata['session_logged_in'] ) {
$board_config['board_timezone'] = $userdata['user_timezone'];
}
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
// $returnstamp = mktime ($myh,$myn,$mys,$mym,$myd,$myr);
// return ( !empty($translate) ) ? strtr(@date($dateformat, $returnstamp), $translate) : @date($dateformat, $returnstamp);
$gmt_time = gmmktime ($myh,$myn,$mys,$mym,$myd,$myr);
return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone'])), $translate) : @gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone']));
}Code: Alles auswählen
function mydateformat ($thisdate, $dateformat='d.m.Y, H:i', $span=0)
{
global $cal_config, $lang, $board_config, $userdata;
if (!empty($cal_config['cal_dateformat'])) {
$dateformat = $cal_config['cal_dateformat'];
} elseif (empty($dateformat)) {
$dateformat = 'd.m.Y, H:i'; // MOD set to default as it's most likely this.
}
if ( !empty($userdata['user_lang'])) {
$board_config['default_lang'] = $userdata['user_lang'];
}
// date comes in as the following:
$myr = substr($thisdate, 0, 4);
$mym = substr($thisdate, 5, 2);
$myd = substr($thisdate, 8, 2);
$myh = substr($thisdate, 11, 2);
$myn = substr($thisdate, 14, 2);
$mys = substr($thisdate, 17, 2);
if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
// Need to strip out any TIME references so...
$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
while (list(,$val) = each ($timerefs))
{
$dateformat = ereg_replace($val, "", $dateformat);
}
// strip out any characters used for time
$dateformat = ereg_replace('[:\.]', " ", $dateformat);
}
// Adjust for the timezone
if ( $userdata['session_logged_in'] ) {
$board_config['board_timezone'] = $userdata['user_timezone'];
}
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
// $returnstamp = mktime ($myh,$myn,$mys,$mym,$myd,$myr);
// return ( !empty($translate) ) ? strtr(@date($dateformat, $returnstamp), $translate) : @date($dateformat, $returnstamp);
$gmt_time = gmmktime ($myh,$myn,$mys,$mym,$myd,$myr);
return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time ), $translate) : @gmdate($dateformat, $gmt_time );
}Um hier nun eine korrekte Endzeit im Format dd.mm.yyyy, hh:mm zu erhalten, habe ich mir erlaubt in der cal_lite.php
Code: Alles auswählen
$start_date = mydateformat($row['stamp'], $userdata['user_dateformat']);
$end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 1);
Code: Alles auswählen
$start_date = mydateformat($row['stamp'], $userdata['user_dateformat']);
$end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 0);
Ich wäre sehr froh, wenn sich hier eine zündende Idee auftun könnte :-) Bisher bin ich ja nur durch abgucken und ohne php-Kentnisse auch schon recht weit gekommen.
PS: Habe die Languagedatei und viele kleine §lang-Angaben geändert und das Layout auch mit OXPUS Birthday-AddOn mal aufgeräumt, also wenn die obigen Lösungen da sind und alles richtig läuft geb ich die Dateien gerne weiter :-)
EDIT (12:40): Ok, also die richtige Anzeige des Startdatums für einen Termin ohne Zeitangabe krieg ich nicht hin...aber stattdessen wäre meine Idee, in der cal_lite.php die Prüf-Funktion, ob ein Datum eingegeben wurde, auf eine Zeitangabe zu erweitern...die Stelle wäre diese:
Code: Alles auswählen
// Check that date info has been set.
if ($cl_m != '' && $cl_d != '' && $cl_y != '' && $cl_em != '' && $cl_ed != '' && $cl_ey != '') {
$submitdate = mktime (23,59,59,$cl_m,$cl_d,$cl_y);
$submitenddate = mktime (23,59,59,$cl_em,$cl_ed,$cl_ey);
}
else {
message_die(GENERAL_ERROR, $lang['No date']);So, letzte Bitte: Im Calendar Lite wird ja wie erwähnt bei Tag-Übergreifenden Terminen die Endzeit 00:00 angehängt. finde ich persönlich nicht so gelungen...kann man die Zeit nicht irgendwie aus dem Datum entfernen wenn schon keine endzeit eingegeben werden kann, so dass nur noch z.B. 04.05.2000 da steht? ...EDIT (13:00): Ok, habs gefunden...allerdings setze ich damit dann d.m.Y für jeden Benutzer in der Ansicht (nicht schlimm, da ich d.m.Y H:i eh auch als Standardvorgabe habe...). In der cal_lite.php ersetze ich $end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 0); durch $end_date = mydateformat($row['eventspan'], $dateformat='d.m.Y', 0); und umgehe damit zwar das individuelle Benutzerformat (hier bei uns aber in der Regel eh d.m.Y) erhalte aber zumindest nur die Tagesanzeige (gilt allerdings auch für alle anderen Termine, aber die allgemeine Aufrechnung von einer Std. bei einem termin mit Zeitangabe find ich eh murks......