0 votes
in SoSci Survey (dt.) by s061410 (130 points)

Liebes Supportteam,

vielen Dank für diese schnelle und hilfreiche Antwort. Das habe ich jetzt schon besser verstanden.

Nun habe ich diesen Code für die ersten 2 Tage meiner Tagebuchstudie geschrieben:

$eingabe = strtotime (value ('KW02_01'));
$versand_T1 = strtotime($eingabe.'06:00:00');
$versand_T2 = strtotime($eingabe.'10:00:00');
$versand_T3 = strtotime($eingabe.'17:30:00');
$versand_T4 = strtotime($eingabe.'21:00:00');
$versand5 = strtotime ('+1 day', $versand_T1);
$versand6 = strtotime ('+1 day', $versand_T2);
$versand7 = strtotime ('+1 day', $versand_T3);
$versand8 = strtotime ('+1 day', $versand_T4);
debug($eingabe);
debug($versand_T1);
debug($versand_T2);
debug($versand_T3);
debug($versand_T4);


mailSchedule (false, 2, $versand_T1);
mailSchedule (false, 11, $versand_T2);
mailSchedule (false, 21, $versand_T3);
mailSchedule (false, 32, $versand_T4);
mailSchedule (false, 3, $versand5);
mailSchedule (false, 12, $versand6);
mailSchedule (false, 22, $versand7);
mailSchedule (false, 33, $versand8);

Wenn ich das teste kommt folgende Info zu dem debug-Befehl:

Debug information for $eingabe:
$eingabe = 1654984800 (integer)

Debug information for $versand_T1:
$versand_T1 = false (boolean)

(diese Info kommt auch für T2-T4). T1 bis T4 sind die vier Messzeitpunkte pro Tag.

Die Serienmails für Tag 2 sind (fast) korrekt programmiert. Ich wähle das morgige Datum (12.06) als Startpunkt aus und es sind die richtigen Fragebogen für Tag2 der Abfrage für morgen programmiert, allerdings mit den Serienmails für TAG 2, obwohl das Tag 1 und somit das Startdatum sein sollte.
Dafür bekomme ich direkt die Abfrage T1 für heute (obwohl morgen als Start ausgewählt) und die Abfragen T2-4 sind auch noch für heute programmiert (11.06)!

Ich habe den PHP Code sowohl auf der gleichen Seite im Fragebogen als auch auf der Seite hinter der Datumsabfrage platziert und konnte keine großen Veränderungen feststellen, aber vielleicht ist die Info wichtig.

Über eine weitere Antwort würde ich mich super freuen, über diesen ausführlichen Support bin ich sehr froh - DANKE für eure Arbeit!

1 Answer

0 votes
by SoSci Survey (328k points)

Erstmal ein Tipp, wie Sie prüfen können, ob das mit dem Zeitstempel klappt:

$eingabe = strtotime (value ('KW02_01'));
$versand_T1 = strtotime($eingabe.'06:00:00');
debug(date('d.m.Y H:i', $versand_T1));

Die Funktion date() macht aus dem Unix-Zeitstempel wieder ein lesbares Datum.

Ich denke, aber dass Ihnen noch ein Leerzeichen fehlt:

$versand_T1 = strtotime($eingabe.'06:00:00');  // falsch
$versand_T1 = strtotime($eingabe.' 06:00:00');  // richtig

Sonst wird die Uhrzeit direkt an das Datum "geklebt". Zum ansehen:

debug($eingabe.'06:00:00');
debug($eingabe.' 06:00:00');
by s061410 (130 points)
Vielen Dank für die ausführliche Antwort.
Lieber Support:
Ich habe jetzt viel ausprobiert, jedoch noch immer ohne Erfolg.

Wenn ich kein Datum über die Abfragen nach dem Startdatum eingebe (Texteingabe offenen mit Auswahl über einen Kalender) erscheint diese debug Information:
Debug information for date('d.m.Y H:i', $versand_t1):
date('d.m.Y H:i', $versand_t1) = 14.06.2022 06:00 (string)
-> analog für t2-t4.

Wenn ich nun aber über den Kalender das Datum 23.06.2022 als Startdatum eingebe kommt diese debug Info:
Debug information for date('d.m.Y H:i', $versand_t1):
date('d.m.Y H:i', $versand_t1) = 01.01.1970 01:00 (string)

und außerdem diese Warnung:
The third argument in function mailSchedule() must be a number. The value is invalid.

Das passiert auch, wenn ich das Datum nur als Datumsangabe (ohne Kalender) einfüge.

Die Serienmails für Versand 5-8 werden alle für morgen um die Zeit der Eingabe des Datums (z.B. heute 14:20) programmiert, auch wenn ich das Startdatum 23.06.22 eingebe.

Diesen Code habe ich verwendet:
$eingabe = strtotime (value ('KW02_01'));
$versand_t1 = strtotime($eingabe.' 06:00:00');


$versand_t2 = strtotime($eingabe.' 10:00:00');


$versand_t3 = strtotime($eingabe.' 17:30:00');


$versand_t4 = strtotime($eingabe.' 21:00:00');

debug(date('d.m.Y H:i', $versand_t1));
debug(date('d.m.Y H:i', $versand_t2));
debug(date('d.m.Y H:i', $versand_t3));
debug(date('d.m.Y H:i', $versand_t4));


$versand5 = strtotime ('+1 day',$versand_t1);
$versand6 = strtotime ('+1 day',$versand_t2);
$versand7 = strtotime ('+1 day',$versand_t3);
$versand8 = strtotime ('+1 day',$versand_t4);



mailSchedule (false, 2,$versand_t1);
mailSchedule (false, 11, $versand_t2);
mailSchedule (false, 21, $versand_t3);
mailSchedule (false, 32, $versand_t4);
mailSchedule (false, 3, $versand5);
mailSchedule (false, 12, $versand6);
mailSchedule (false, 22, $versand7);
mailSchedule (false, 33, $versand8);

Könnte es noch ein anderes Problem geben oder liegt ein Fehler im Code vor, den ich einfach übersehe?

Vielen Dank!
by SoSci Survey (328k points)
> Debug information for date('d.m.Y H:i', $versand_t1):
> date('d.m.Y H:i', $versand_t1) = 01.01.1970 01:00 (string)

Der 1.1.1970 ist der Nullpunkt für Unix-Zeitstempel. Und eine 0 ist das Äquivalent zu "funktioniert nicht. Also müssen wir weiter oben ansetzen. Was steht denn in der Ausgabe zu

$eingabe = strtotime(value('KW02_01'));
debug($eingabe.' 06:00:00');
by s061410 (130 points)
edited by s061410
Debug information for $eingabe.' 06:00:00':
$eingabe.' 06:00:00' = 1655935200 06:00:00 (string)

Das kommt raus, wenn ich als Startdatum den 23.06.2022 eingebe.

und wenn ich diesen Code verwende und das Datum eintrage:
$eingabe = strtotime(value('KW02_01'));
debug($eingabe);

erhalte ich diese Ausgabe:
Debug information for $eingabe:
$eingabe = 1655935200 (integer)
by SoSci Survey (328k points)
Na, dan haben wir doch das Problem. value() liefert in Ihrem Fall bereits einen Zeitstempel. In dem Fall sollte die Lösung einfach sein:

$t0 = value('KW02_01');
$versand_t1 = strtotime('06:00:00', $t0);

Was ist KW02_01 denn genau für eine Variable, woher genau kommt diese? Ich frage deshalb, weil 1655935200 der Zeitstempel für den 22.06.2022 ist ... aber nicht für 0 Uhr, sondern für 22 Uhr (GMT +0). Eventuell müssen Sie beim Rechnen also noch ein wenig auf die Zeitzone achten.
by s061410 (130 points)
Danke, ich glaube t0 ist nun korrekt definiert!:)
Das hier ist die debug Information:
Debug information for $t0:
$t0 = 2022-06-23 (string)

Die Variable KW02_01 ist eine offene Texteingabe mit der Auswahl eines Datums mittels Kalender.

Der weitere Code für die Zeitpunkte des ersten Tages lautet (ich hoffe so, wie sie mir geraten haben:
$versand_t1 = strtotime('06:00:00',$t0);

$versand_t2 = strtotime('10:00:00',$t0);

$versand_t3 = strtotime('17:30:00',$t0);

$versand_t4 = strtotime('21:00:00',$t0);

Das klappt dann leider an dieser Stelle nicht mehr.
Die Debug-Info lautet:
Debug information for date('d.m.Y H:i', $versand_t1):
date('d.m.Y H:i', $versand_t1) = 01.01.1970 06:00 (string) usw....

Hier scheint also das Problem zu liegen.
Die Serienmails werden dann für den heutigen Tag und nicht für den 23.06. angelegt zu für mich wilden Zeitpunkten (in Abhängigkeit des Zeitpunkts der Datumseingabe, nicht in Abhängigkeit des programmierten Zeitpunktes - das sehe ich an den Minuten - Datum um 06:45 Uhr eingegeben, Fragebogen für 6 Uhr morgens ist für 12:45 Uhr am gleichen Tag programmiert).

Die Zeitzone ist aber auf Europa/Berlin eingestellt, das habe ich mehrfach geprüft.
by SoSci Survey (328k points)
> Danke, ich glaube t0 ist nun korrekt definiert!:)
> $t0 = 2022-06-23 (string)

Jetzt ist es ja kein Zeitstempel mehr, sondern ein String?! In dem Fall müsste der nächste Befehl wie folgt aussehen:

$versand_t1 = strtotime($t0.' 06:00:00');

Alternativ lassen wir die weiteren Befehle und ändern nur die Definition von $t0.

$t0 = strototime(value('KW02_01'));
by s061410 (130 points)
Dank, danke, danke!

Es funktioniert! Ohne ihre Hilfe hätte ich das niemals geschafft.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...