0 votes
in SoSci Survey (dt.) by s271156 (110 points)
edited by SoSci Survey

Hallo,

ich möchte gerne die Funktion "Datum (mit Kalender zum Auswählen)" nutzen, um Proband*innen individuell einen Start-Tag für Alltagsbefragungen festlegen zu lassen, damit die möglichen Daten übersichtlich dargestellt sind.

Mein Code (s.u.) funktioniert allerdings nur, wenn ich mögliche Daten als Dropdown- oder Auswahlfrage anbiete, da dann jede Option eine eigene Kennung hat (bspw. 1 = 10.03.24).

$times = array(
  1 => strtotime('2024-03-10 17:15:00'),
  2 => strtotime('2024-03-11 10:00:00'),
  3 => strtotime('2024-03-12 10:00:00'),
  4 => strtotime('2024-03-13 10:00:00'),
  5 => strtotime('2024-03-14 10:00:00'),
  6 => strtotime('2024-03-15 10:00:00'),
);
$start = $times[value('IN09')];

if(value('IN09') > 0){   
mailSchedule(false, 2, $start);  
mailSchedule(false, 13, ($start + 150), [
    'status' => 'no-response'
]); 
mailSchedule(false, 3, ($start + 300));
mailSchedule(false, 14, ($start + 450), [
    'status' => 'no-response'
]); 
usw.

Wie kann ich die Daten aus dem Kalender in den Code einbinden, um die Serienmails dann ab dem Start-Tag zu versenden, bzw. ist es überhaupt möglich?

Und wenn ja noch direkt eine zweite Frage dazu: Ist es möglich als frühestmögliches Datum immer automatisch den Folgetag einzustellen?

Schonmal vielen Dank und beste Grüße!

1 Answer

0 votes
by SoSci Survey (327k points)

ich möchte gerne die Funktion "Datum (mit Kalender zum Auswählen)" nutzen, um Proband*innen individuell einen Start-Tag für Alltagsbefragungen festlegen zu lassen, damit die möglichen Daten übersichtlich dargestellt sind.

Können die Befragten das Datum mehr oder weniger beliebig wählen oder sind nur die vorab von Ihnen definierten Tage möglich? Ich glaube nämlich, dass das Kalender-Element eine Beschränkung der Auswahl auf bestimmte Tage nicht erlaubt.

Wenn es um bestimmte Tage geht, wäre es vermutlich einfacher, einen Kalender für die frageliche Woche als Vektorgrafik zu bauen, und diesen über die SVG-Auswahl anzuzeigen.

Wie kann ich die Daten aus dem Kalender in den Code einbinden, um die Serienmails dann ab dem Start-Tag zu versenden, bzw. ist es überhaupt möglich?

Falls es ein beliebiges Datum sein kann:

$datum = strtotime(value('XY01_01'));
$start = strtotime('10:00:00', $datum);

Ist es möglich als frühestmögliches Datum immer automatisch den Folgetag einzustellen?

Das müsste über preset() ober der Frage funktionieren.

$nextDay = date('Y-m-d', strtotime('tomorrow'));
preset('XY01_01', $nextDay);
by s271156 (110 points)
Schon mal vielen Dank! Das werde ich auf jeden Fall ausprobieren!

Tatsächlich kann man aber bei der Kalenderfunktion in den Einstellungen ein frühest- und ein spätmöglichstes Datum festlegen und andere Daten können im Kalender dann auch nicht ausgewählt werden. Das funktioniert so weit auch.

Bezieht sich Ihr vorgeschlagener Code für ein beliebiges Datum dann auf den Kalender?
by s271156 (110 points)
Zu dem zweiten Teil meiner Frage:
Ich habe die preset()-Funktion ausprobiert, allerdings wird dann automatisch der nächste Tag ausgewählt.

Die Idee war allerdings, dass der Teilnehmer den Tag immer noch frei wählen kann, dass aber der Folgetag der frühestmögliche Tag ist, der ausgewählt werden kann:
- Wird die Umfrage am 13.03. ausgefüllt, dann können im Kalender erst Termine am dem 14.03. ausgewählt werden
- Wird die Umfrage am 15.03. ausgefüllt, dann können im Kalender erst Termine am dem 16.03. ausgewählt werden
- usw.
by SoSci Survey (327k points)
> allerdings wird dann automatisch der nächste Tag ausgewählt.


Da hatte ich Ihre Frage nicht genau genug gelesen. Wenn Sie den Zeitraum dynamisch eingrenzen möchten, müssten Sie mit ein wenig Javascript arbeiten. Wenn Ihr Eingabefeld die ID TT04_01 hat, würde das z.B. so aussehen:

$("#TT04_01").datepicker("destroy");

var TT04_01settings = {
                    dateFormat: "dd.mm.yy",
                    changeMonth: true,
                    changeYear: true,
                    showAnim: "slideDown",
                    yearRange: "2024:c+10",
                    minDate: new Date("2024-03-01"),
                    maxDate: null,
                    onSelect: SoSciTools.onDatePickerSelect
};
$.extend(TT04_01settings, $.datepicker.regional["de"]);
$( function() {
        $("#TT04_01").datepicker(TT04_01settings);
});

Und die Angabe bei
minDate: new Date("2024-03-01")
müssten Sie dann via Platzhalter mit dem jeweils morgigen Datum belegen.
by s271156 (110 points)
Ich habe den Code gerade ausprobiert, habe es aber leider nicht hinbekommen. An den möglichen Daten meines Kalenders ändert sich gar nichts, ich bekomme auch keine Fehlermeldung angezeigt.

Was ich probiert habe war mit

$tomorrow = date('Y-m-d', strtotime('tomorrow'));
replace('%tomorrow%',$tomorrow);

einen Platzhalter für das morgige Datum zu generieren.

Wie binde ich den Platzhalter denn korrekt bei "minDate" ein?
by SoSci Survey (327k points)
>  ich bekomme auch keine Fehlermeldung angezeigt.

Haben Sie in die JavaScript-Fehlerkonsole Ihres Browsers geschaut?
https://www.soscisurvey.de/help/doku.php/de:general:browser-tools#javascript-probleme

> Wie binde ich den Platzhalter denn korrekt bei "minDate" ein?

Naja, so:

$("#TT04_01").datepicker("destroy");

var TT04_01settings = {
                    dateFormat: "dd.mm.yy",
                    changeMonth: true,
                    changeYear: true,
                    showAnim: "slideDown",
                    yearRange: "2024:c+10",
                    minDate: new Date("%tomorrow%"),
                    maxDate: null,
                    onSelect: SoSciTools.onDatePickerSelect
};
$.extend(TT04_01settings, $.datepicker.regional["de"]);
$( function() {
        $("#TT04_01").datepicker(TT04_01settings);
});

Wenn Sie damit nicht weiterkommen, posten Sie gerne mal einen Pretest-Link direkt (!) zu der Seite, wo man das Referenzdatum eingibt. Ich vermute, dieser Code kommt dann auf der folgenden Seite?
by s271156 (110 points)
https://www.soscisurvey.de/wg_umwelt/?act=Q0mewVfZbKk2c26KhaPRDivu

Das hier ist der Pretest-Link. Direkt auf der ersten Seite kann man im Kalender ein Datum auswählen. Den Code habe ich ganz an den Anfang der ersten Seite (vor die Frage nach dem Start-Tag) gestellt. Den Code für den Platzhalter in ein PHP-Feld und den JavaSript-Code in ein HTML-Feld.
by SoSci Survey (327k points)
Okay, das Code wird im Moment noch zur falschen Zeit ausgeführt. Bitte fügen sie um den Code außenherum noch Folgendes ein:

window.addEventListener("load", function() {
... Code wie bisher ...
});
by s271156 (110 points)
Danke, aber leider klappt es immer noch nicht. Ich kann ja nochmal den Code mitschicken, den ich aktuell verwende:

PHP:
$tomorrow = date('Y-m-d', strtotime('tomorrow'));
replace('%tomorrow%',$tomorrow);

HTML:
<script type="text/javascript">
<!--

window.addEventListener("load", function() {

$("#IN07_01").datepicker("destroy");

    var IN07_01settings = {
                    dateFormat: "dd.mm.yy",
                    changeMonth: true,
                    changeYear: true,
                    showAnim: "slideDown",
                    yearRange: "2024:c+10",
                    minDate: new Date("%tomorrow%"),
                    maxDate: null,
                    onSelect: SoSciTools.onDatePickerSelect
    };

$.extend(IN07_01settings, $.datepicker.regional["de"]);
$(function() {
        $("#IN07_01").datepicker(IN07_01settings);
});

});

//-->
</script>

Der Code steht aktuell auf der gleichen Fragebogenseite VOR der Frage IN07. Es ändert sich aber auch nichts, wenn ich ihn dahinter stelle. Ich glaube, dass sich der Code aktuell gar nicht auf den Kalender auswirkt, da auch nichts passiert, wenn ich als frühestes Datum einen konkreten Tag angebe.
Ich habe auch noch probiert in den Einstellungen der Frage (wo man ja auch konkrete Tage als min/max angeben kann) den Platzhalter %tomorrow% zu verwenden, das funktioniert aber auch nicht.

Vielleicht fällt Ihnen ja noch etwas ein, was mein Problem lösen könnte, wenn nicht aber dennoch bereits vielen Dank für die schnelle Hilfe!!
by SoSci Survey (327k points)
Wenn ich den Pretest-Link aufrufe, sieht es gut aus: Alles vor dem 15.3. ist da ausgegraut.
by s271156 (110 points)
Bei mir irgendwie nicht, bzw. nicht immer. Es hat gerade ein paar Mal funktioniert, als ich in Sosci auf "Fragebogen ab der aktuellen Seite testen" geklickt habe, aber dann auch wieder nicht.
Im Pretest ist es bei mir auch nicht ausgegraut.
by SoSci Survey (327k points)
Dann scheint es eine Konkurrenzsituation zwischen dem automatisch eingefügten Script und Ihrer Ergänzung zu geben. Schalten sie für das Textfeld den Kalender bitte mal aus (nur noch "Datum" als Format), und fügen Sie auf der Seite noch folgenden PHP-Code ein:

library('jQuery');
library('jQuery-ui');

Für den Kalender sorgt Ihr JavaScript von oben. Die Zeile

$("#IN07_01").datepicker("destroy");

müssten Sie allerdings noch entfernen.
by s271156 (110 points)
Das funktioniert, vielen Dank!!!

Gibt es allerdings noch eine Möglichkeit den Kalender wieder auf ein deutsches Format umzustellen? Jetzt sind die Tage von Sunday-Saturday (statt Montag-Sonntag) angeordnet und die Monate sind auch in englisch.
by SoSci Survey (327k points)
Na klar :) Dafür brauchen Sie noch mehr PHP-Code:

library('jQuery-ui-datepicker-i18n');

Die zugehörige Zeile im JavaScript-Code haben Sie bereits:

$.extend(IN07_01settings, $.datepicker.regional["de"]);

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

...