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

0 votes

Hallo,

wir planen eine umfassende Studie mit einem Prätest-Fragebogen auf Sosci und später dann eine Phase mit mehreren Befragungen pro Tag.

Im Prätest sollen die Probanden angeben (d.h. in einem Item aus mehreren Antwortmöglichkeiten eine auswählen), über welchen Zeitraum sie die täglichen Befragungen haben möchten (z.B. "02.08.-15.08." oder "09.08.-22.08." usw.).

Wenn die Probanden aber den Prätest erst nach einem bestimmten Stichtag bearbeiten, dann sollen sie natürlich nicht die Befragungen auswählen können, deren Anfangsdatum hinter dem Tag des Prätests liegt. Im Idealfall sollte es möglich sein, dass Antwortmöglichkeiten unter bestimmten Bedingungen angezeigt werden. Das heißt, "Wenn aktuelles Datum > Datum x, dann zeige Antwortmöglichkeit a nicht an". Ist das mithilfe von PHP möglich?

in SoSci Survey (dt.) by s083020 (120 points)

1 Answer

0 votes

Das aktuelle Datum können Sie mittels time() abfragen - da bekommen Sie einen Unix-Zeitstempel. Wenn Sie es ein wenig eleganter machen möchten, können Sie die Datumsoptionen (so wie sie in der Auswahl stehen) in einem Array ablegen:

$optionen = [
  1 => '2021-07-06',
  2 => '2021-07-07',
  3 => '2021-07-08',
  4 => '2021-07-09',
  5 => '2021-07-10'
];
$items = [];
foreach ($optionen as $n => $datum) {
  $time = strtotime($datum);
  if ($time > time()) {
    $items[] = $n;
  }
}
question('AB01', $items);
by SoSci Survey (205k points)
Vielen Dank für die Antwort! Da die Auswahloptionen nicht nur einen Tag beinhalten, sondern gleich einen ganzen Zeitraum (z.B. 1. Option lautet "26.07.21 bis 08.08.21", 2. Option lautet "02.08.21 bis 15.08.21"), habe ich den Code einfacher gemacht, ohne Arrays. In der if-clause ist nun relevant, ob der Tag der Beantwortung des Fragebogens vor oder nach/am jeden Donnerstag als Stichtag ist. Wenn die Beantwortung noch vor dem Donnerstag ist, dann wird auch die Antwortoption mit Beginn ab nächstem Montag angezeigt, wenn die Beanwortung später ist, dann fällt die Antwortoption weg, und die erste angezeigte Option ist der Montag in der Woche darauf.
Ist der Code so richtig?

if (time() < strtotime('2021-07-22')) {

question('ZE01', '1-7');
}

if (time() >= strtotime('2021-07-22') && time() < strtotime('2021-07-29')) {

question('ZE01', '2-7');
}

if (time() >= strtotime('2021-07-29') && time() < strtotime('2021-08-05')) {

question('ZE01', '3-7');
}

uw.
> Ist der Code so richtig?

Er sieht zumindest korrekt aus. Funktioniert er? Zum Testen müssten Sie einfach mal andere Daten einsetzen.

Ich finde meine Lösung von oben ein wenig eleganter, zumal auch Sie ja nur eine Datumsgrenze für jede Antwortoption haben. Das Array würde also einfach mit '2021-07-22' starten.

Und statt der Kombination von >= und < könnzen Sie einfach elseif verwenden:

if (time() < strtotime('2021-07-22')) {
  question('ZE01', '1-7');
}
elseif (time() < strtotime('2021-07-29')) {
  question('ZE01', '2-7');
}
...

Das verringert das Potenzial sich zu vertippen.
...