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

Hallo zusammen,

ich benötige Hilfe bei einem PHP-Code, der wie folgt lautet:

$personID = value('EA01');
$time = value('SD24_01');
$timestamp = strtotime($time);
mailSchedule($personID, 2, strtotime('next Monday', $timestamp));
mailSchedule($personID, 4, strtotime('next Monday + 1 day', $timestamp));

$time1 = value('SD2501');
$timestamp1 = strtotime($time1);
mailSchedule($personID, 3, strtotime ('next Monday', $timestamp1));
mailSchedule($personID, 5, strtotime ('next Monday + 1 day', $timestamp1));
____

> EA01 ist eine Opt-In Frage zur Abfrage der Mail-Adresse
> SD24_01 fragt die Feierabendzeit ab
> SD25_01 fragt die Zu-Bett-Geh-Zeit ab.

Nach der Teilnahme am Basisfragebogen sollen die TN ab dem nächsten Montag täglich zwei Fragebögen erhalten um die Uhrzeiten, die in SD24_01 und SD25_01 angegeben sind.
Leider scheint das System next Monday nicht zu erkennen und die Mails werden deshalb nicht richtig verschickt; laut System wie folgt:

E-Mail → Einladung MZP 1_1 (Fragebogen: MZP_1)
Einladungsmail Tagebuchstudie Tag 1 Feierabendfragebogen
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger

E-Mail → Einladung MZP 2_1 (Fragebogen: MZP_2)
Einladungsmail Tagebuchstudie Tag 1 Fragebogen vor dem Schlafengehen
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger
14.02.2022, 00:00 Versand an 1 Empfänger

E-Mail → Einladung MZP 1_2 (Fragebogen: MZP_1)
Einladungsmail Tagebuchstudie Tag 2 Feierabendfragebogen
14.02.2022, 14:00 Versand an 1 Empfänger
14.02.2022, 15:00 Versand an 1 Empfänger
14.02.2022, 17:00 Versand an 1 Empfänger
14.02.2022, 17:30 Versand an 1 Empfänger
14.02.2022, 22:14 Versand an 1 Empfänger

E-Mail → Einladung MZP 2_2 (Fragebogen: MZP_2)
Einladungsmail Tagebuchstudie Tag 2 Fragebogen vor dem Schlafengehen
14.02.2022, 22:00 Versand an 1 Empfänger
14.02.2022, 22:00 Versand an 1 Empfänger
14.02.2022, 22:14 Versand an 1 Empfänger
14.02.2022, 22:30 Versand an 1 Empfänger
14.02.2022, 23:00 Versand an 1 Empfänger

Woran kann das liegen?

Vielen Dank im Voraus!

by s105225 (130 points)
$personID = value('EA01');
$time = value('SD24_01');
$timestamp = strtotime('tomorrow '.$time);
mailSchedule($personID, 2, $timestamp);
mailSchedule($personID, 4, strtotime('$timestamp + 1 day'));

$time1 = value('SD25_01');
$timestamp1 = strtotime('tomorrow '.$time1);
mailSchedule($personID, 3, $timestamp1);
mailSchedule($personID, 5, strtotime('$timestamp1 + 1 day'));

Mittlerweile sieht der Code so aus, aber er hat Probleme mit mailSchedule($personID, 5, strtotime('$timestamp1 + 1 day'));
by SoSci Survey (306k points)
Nachdem die Frage bereits geschlossen wurde, nur kurz die Auflösung, falls noch jemand anders sucht:

strtotime('+1 day', $timestamp1);
by s105225 (130 points)
Unser Code läuft jetzt wie folgt:

$personID = value('EA01');
$time = value('SD24_01');
$timestamp = strtotime('tomorrow '.$time);
mailSchedule($personID, 2, $timestamp);
$timestamp1 = strtotime('tomorrow + 1 day'.$time);
mailSchedule($personID, 4, $timestamp1);

$time1 = value('SD25_01');
$timestamp2 = strtotime('tomorrow '.$time1);
mailSchedule($personID, 3, $timestamp2);
$timestamp3 = strtotime('tomorrow + 1 day'.$time1);
mailSchedule($personID, 5, $timestamp3);

Allerdings möchten wir jetzt noch mitprogrammieren, dass der Fragebogen der Variable SD25_01 30 Minuten früher versendet wird, als die Zeit, die in SD 25_01 angegeben ist. Ich habe es wie folgt versucht, was aber leider nicht funktioniert hat (die Serienmails werden schlichtweg nicht verschickt):

$personID = value('EA01');
$time = value('SD24_01');
$timestamp = strtotime('tomorrow '.$time);
mailSchedule($personID, 2, $timestamp);
$timestamp1 = strtotime('tomorrow + 1 day'.$time);
mailSchedule($personID, 4, $timestamp1);

$time1 = value('SD25_01');
$timestamp2 = strtotime('tomorrow '.$time1);
mailSchedule($personID, 3, strtotime('-1800 seconds'.$timestamp2));
$timestamp3 = strtotime('tomorrow + 1 day'.$time1);
mailSchedule($personID, 5, strtotime('-1800 seconds'.$timestamp3));

Können Sie mir sagen, wie das dann stattdessen programmiert wird? :)

Vielen Dank!

1 Answer

0 votes
by SoSci Survey (306k points)

Die Funktnio strtotime() erlaubt einen oder zwei Parameter. Der erste ist die textliche Beschreibung, was man will (+1 hour) als Text. Die zweite ist ein Linux-Zeitstempel (Sekunden seit dem 1.1.1970) als Zahl.

mailSchedule($personID, 3, strtotime('-1800 seconds'.$timestamp2));

Hier verbinden Sie Text und Zahl durch den Punkt zu ungefähr so einem Text:

-1800 seconds1645042346

Das macht inhaltlich nicht mehr viel Sinn. Stattdessen möchten Sie die Parameter getrennt angeben.

mailSchedule($personID, 3, strtotime('-1800 seconds', $timestamp2));

Ja, zugegeben, dass Punkt und Komma so einen großen Unterschied machen, ist nicht ganz trivial.

by s105225 (130 points)
Danke für die super schnelle Hilfe! Trivial ist das wirklich nicht... Aber es funktioniert! Vielen Dank. :)

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

...