Ein erfrischender JavaScript Datepicker
- Leichtgewichtig (weniger als 5kb minified und gzipped)
- Keine Abhängigkeiten (spielt aber gut mit Moment.js)
- Modulare CSS-Klassen für einfaches Styling
Try Pikaday Demo →
Produktionsreif? Seit Version 1.0.0 ist Pikaday stabil und wird in der Produktion eingesetzt. Wenn Sie jedoch Bugs finden oder Feature-Wünsche haben, senden Sie diese bitte an den GitHub Issue Tracker.Siehe auch das Changelog
Installation
Sie können Pikaday als NPM-Paket installieren:
npm install pikaday
oder direkt auf das CDN verlinken:
<script src="https://cdn.jsdelivr.net/npm/pikaday/pikaday.js"></script>
Styles
Sie müssen auch die CSS-Datei von Pikaday einbinden. Dieser Schritt hängt davon ab, wie Pikaday installiert wurde. Entweder von NPM importieren:
@import './node_modules/pikaday/css/pikaday.css';
Oder auf das CDN verlinken:
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/pikaday/css/pikaday.css">
Verwendung
Pikaday kann an ein Eingabefeld gebunden werden:
<input type="text">
Fügen Sie das JavaScript am Ende Ihres Dokuments ein:
<script src="pikaday.js"></script><script> var picker = new Pikaday({ field: document.getElementById('datepicker') });</script>
Wenn Sie jQuery verwenden, stellen Sie sicher, dass Sie nur das erste Element übergeben:
var picker = new Pikaday({ field: $('#datepicker') });
Wenn die Pikaday-Instanz nicht an ein Feld gebunden ist, können Sie das Element an beliebiger Stelle anfügen:
var field = document.getElementById('datepicker');var picker = new Pikaday({ onSelect: function(date) { field.value = picker.toString(); }});field.parentNode.insertBefore(picker.el, field.nextSibling);
Formatierung
Standardmäßig werden Datumsangaben mit dem Standard-JavaScript-Date-Objekt formatiert und geparst.Wenn Moment.js im Geltungsbereich verfügbar ist, wird es zum Formatieren und Parsen von Eingabewerten verwendet. Sie können eine zusätzliche format
-Option an die Konfiguration übergeben, die an den moment
-Konstruktor übergeben wird, siehe das moment.js-Beispiel für eine vollständige Version.
<input type="text" value="9 Oct 2014"><script src="moment.js"></script><script src="pikaday.js"></script><script> var picker = new Pikaday({ field: document.getElementById('datepicker'), format: 'D MMM YYYY', onSelect: function() { console.log(this.getMoment().format('Do MMMM YYYY')); } });</script>
Für eine fortgeschrittene und flexible Formatierung können Sie der Konfiguration eine eigene toString
-Funktion übergeben, die zur Formatierung des Datumsobjekts verwendet wird.
toString(date, format = 'YYYY-MM-DD')
Sie sollten eine Zeichenkette zurückgeben.
Seien Sie jedoch vorsichtig. Wenn die formatierte Zeichenkette, die du zurückgibst, nicht korrekt von der Date.parse
-Methode geparst werden kann (oder von moment
, wenn diese verfügbar ist), dann musst du deine eigene parse
-Funktion in der Konfiguration bereitstellen. Dieser Funktion wird der formatierte String und das Format übergeben:
parse(dateString, format = 'YYYY-MM-DD')
var picker = new Pikaday({ field: document.getElementById('datepicker'), format: 'D/M/YYYY', toString(date, format) { // you should do formatting based on the passed format, // but we will just return 'D/M/YYYY' for simplicity const day = date.getDate(); const month = date.getMonth() + 1; const year = date.getFullYear(); return `${day}/${month}/${year}`; }, parse(dateString, format) { // dateString is the result of `toString` method const parts = dateString.split('/'); const day = parseInt(parts, 10); const month = parseInt(parts, 10) - 1; const year = parseInt(parts, 10); return new Date(year, month, day); }});
Konfiguration
Wie die Beispiele oben zeigen, hat Pikaday viele nützliche Optionen:
-
field
den Datepicker an ein Formularfeld binden -
trigger
ein anderes Element verwenden, um das Öffnen des Datepickers auszulösen, siehe Trigger-Beispiel (Standard istfield
) -
bound
Automatisches Ein-/Ausblenden des Datepickers beifield
Fokus (Standardtrue
wennfield
gesetzt ist) -
ariaLabel
Daten-Attribut auf dem Eingabefeld mit einem Aria-Hilfstext (wird nur angewendet wennbound
gesetzt ist) -
position
Bevorzugte Position des Datepickers relativ zum Formularfeld, z.g.:top right
,bottom right
Hinweis: Es kann eine automatische Anpassung erfolgen, um zu vermeiden, dass der Datumsanzeiger außerhalb des Ansichtsfensters angezeigt wird, siehe Beispiel für Positionen (Standardwert ‚unten links‘) -
reposition
kann auf false gesetzt werden, um den Datumsanzeiger nicht innerhalb des Ansichtsfensters neu zu positionieren und ihn zu zwingen, die konfigurierteposition
zu nehmen (Standardwert: true) -
container
DOM-Knoten zum Rendern des Kalenders, siehe Container-Beispiel (Standard: undefiniert) -
format
das Standardausgabeformat für.toString()
undfield
Wert (erfordert Moment.js für benutzerdefinierte Formatierung) -
formatStrict
das Standardflag für das strenge Datums-Parsing von Moment (erfordert Moment.js für benutzerdefinierte Formatierung) -
toString(date, format)
Funktion, die für benutzerdefinierte Formatierung verwendet wird. Diese Funktion hat Vorrang vor der Funktionmoment
. -
parse(dateString, format)
, die für das Parsen von Eingabestrings und das Abrufen eines Datumsobjekts aus diesen verwendet wird. Diese Funktion hat Vorrang vormoment
. -
defaultDate
dem Anfangsdatum, das beim ersten Öffnen angezeigt wird -
setDefaultDate
Boolescher Wert (wahr/falsch).defaultDate
ist der erste ausgewählte Wert -
firstDay
erster Wochentag (0: Sonntag, 1: Montag usw.) -
minDate
das minimale/früheste Datum, das ausgewählt werden kann (dies sollte ein natives Datumsobjekt sein – z.z. B.new Date()
odermoment().toDate()
) -
maxDate
das maximale/späteste Datum, das ausgewählt werden kann (dies sollte ein natives Datumsobjekt sein – z. B.new Date()
odermoment().toDate()
) -
disableWeekends
Auswahl von Samstagen oder Sonntagen verbieten -
disableDayFn
Callback-Funktion, der ein Datumsobjekt für jeden Tag in der Ansicht übergeben wird. Sollte true zurückgeben, um die Auswahl dieses Tages zu deaktivieren. -
yearRange
Anzahl der Jahre auf beiden Seiten (z.B.10
) oder Array des oberen/unteren Bereichs (z.B.)
-
showWeekNumber
zeige die ISO-Wochennummer am Kopf der Zeile (Standardfalse
) -
pickWholeWeek
wähle eine ganze Woche anstelle eines Tages (Standardfalse
) -
isRTL
kehr den Kalender um für Sprachen von rechts nach linkslinks -
i18n
Sprachvorgaben für Monats- und Wochentagsnamen (siehe Internationalisierung unten) -
yearSuffix
zusätzlicher Text, der an das Jahr im Titel angehängt wird -
showMonthAfterYear
den Monat nach dem Jahr im Titel darstellen (Standardfalse
) -
showDaysInNextAndPreviousMonths
Tage des Kalendergitters darstellen, die in den nächsten oder vorherigen Monat fallen (Standard: false) -
enableSelectionDaysInNextAndPreviousMonths
erlaubt dem Benutzer, ein Datum auszuwählen, das im nächsten oder vorhergehenden Monat liegt (Standard: false) -
numberOfMonths
Anzahl der sichtbaren Kalender -
mainCalendar
wennnumberOfMonths
verwendet wird, hilft dies bei der Auswahl des Hauptkalenders (Standardleft
, kann aufright
gesetzt werden). Nur für die erste Anzeige verwendet oder wenn ein ausgewähltes Datum noch nicht sichtbar ist -
events
Array von Daten, die Sie von normalen Tagen unterscheiden möchten (z.B.)
-
theme
Definieren Sie einen Klassennamen, der als Aufhänger für das Styling verschiedener Themen verwendet werden kann, siehe Theme-Beispiel (Standardnull
) -
blurFieldOnSelect
definiert, ob das Feld verschwommen ist, wenn ein Datum ausgewählt wird (Standardtrue
) -
onSelect
Callback-Funktion, wenn ein Datum ausgewählt wird -
onOpen
Callback-Funktion, wenn der Picker sichtbar wird -
onClose
Callback-Funktion, wenn der Picker ausgeblendet wird -
onDraw
Callback-Funktion, wenn der Picker einen neuen Monat zeichnet -
keyboardInput
Unterstützung für Tastatureingaben aktivieren (Standardtrue
)
Styling
Wenn die reposition
Konfigurations-Option aktiviert ist (Standard), Pikaday wendet CSS-Klassen auf den Datepicker an, je nachdem wie er positioniert ist:
top-aligned
left-aligned
right-aligned
bottom-aligned
Beachten Sie, dass das DOM-Element zu jeder Zeit typischerweise 2 CSS-Klassen hat (z.B.. top-aligned right-aligned
etc).
jQuery Plugin
Die normale Version von Pikaday benötigt kein jQuery, jedoch gibt es ein jQuery Plugin, falls das Ihr Boot antreibt (siehe plugins/pikaday.jquery.js
im Repository). Diese Version benötigt natürlich jQuery und kann wie andere Plugins verwendet werden: Siehe das jQuery-Beispiel für eine vollständige Version.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script src="pikaday.js"></script><script src="plugins/pikaday.jquery.js"></script><script>// activate datepickers for all elements with a class of `datepicker`$('.datepicker').pikaday({ firstDay: 1 });// chain a few methods for the first datepicker, jQuery style!$('.datepicker').eq(0).pikaday('show').pikaday('gotoYear', 2042);</script>
AMD-Unterstützung
Wenn Sie einen modularen Skript-Loader verwenden, ist Pikaday nicht an das globale Objekt gebunden und passt gut in Ihren Build-Prozess. Sie können Pikaday wie jedes andere Modul benötigen.
require(, function(Pikaday) { var picker = new Pikaday({ field: document.getElementById('datepicker') });});
Das gleiche gilt für das oben erwähnte jQuery-Plugin.
require(, function($) { $('#datepicker').pikaday();});
CommonJS-Modulunterstützung
Wenn Sie eine CommonJS-kompatible Umgebung verwenden, können Sie die require-Funktion verwenden, um Pikaday zu importieren.
var pikaday = require('pikaday');
Wenn Sie alle benötigten Module mit Browserify bündeln und Moment.js nicht verwenden, geben Sie die Option ignore an:
browserify main.js -o bundle.js -i moment
Ruby on Rails
Wenn Sie Ruby on Rails verwenden, stellen Sie sicher, dass Sie sich das Pikaday Gem ansehen.
Methoden
Sie können die Datumsauswahl nach der Erstellung steuern:
var picker = new Pikaday({ field: document.getElementById('datepicker') });
Get and set date
picker.toString('YYYY-MM-DD')
Gibt das ausgewählte Datum in einem String-Format zurück. Wenn Moment.js vorhanden ist (empfohlen), kann Pikaday jedes Format zurückgeben, das Moment versteht. Sie können auch Ihre eigene toString
-Funktion bereitstellen und die Formatierung selbst vornehmen. Lesen Sie mehr im Abschnitt über die Formatierung.
Wenn weder ein moment
-Objekt existiert noch eine toString
-Funktion bereitgestellt wird, wird die Standardmethode .toDateString()
von JavaScript verwendet.
picker.getDate()
Gibt ein einfaches JavaScript Date
-Objekt des ausgewählten Tages zurück, oder null
, wenn keine Auswahl besteht.
picker.setDate('2015-01-01')
Setzen Sie die aktuelle Auswahl. Diese wird innerhalb der Grenzen der Optionen minDate
und maxDate
eingeschränkt, wenn diese angegeben sind. Optional kann ein Boolean als zweiter Parameter übergeben werden, um das Auslösen des onSelect-Callbacks zu verhindern (true), so dass das Datum stillschweigend gesetzt werden kann.
picker.getMoment()
Gibt ein Moment.js-Objekt für das ausgewählte Datum zurück (Moment muss vor Pikaday geladen sein).
picker.setMoment(moment('14th February 2014', 'DDo MMMM YYYY'))
Setzt die aktuelle Auswahl mit einem Moment.js-Objekt (siehe setDate
für Details).
Datum löschen und zurücksetzen
picker.clear()
Löscht und setzt die Eingabe zurück, an die der Picker gebunden ist.
Aktuelle Ansicht ändern
picker.gotoDate(new Date(2014, 1))
Wechselt die aktuelle Ansicht, um ein bestimmtes Datum zu sehen. In diesem Beispiel wird zum Februar 2014 gesprungen (Monat ist ein auf Null basierender Index).
picker.gotoToday()
Kurzbefehl für picker.gotoDate(new Date())
picker.gotoMonth(2)
Die aktuelle Ansicht nach Monat ändern (0: Januar, 1: Februar usw.).
picker.nextMonth()
picker.prevMonth()
Zum nächsten oder vorherigen Monat gehen (dadurch wird das Jahr geändert, falls erforderlich).
picker.gotoYear()
Ändern Sie das angezeigte Jahr.
picker.setMinDate()
Aktualisieren Sie das minimale/früheste Datum, das ausgewählt werden kann.
picker.setMaxDate()
Aktualisieren Sie das maximale/letzte Datum, das ausgewählt werden kann.
picker.setStartRange()
Aktualisieren Sie das Startdatum des Bereichs. Für die Verwendung von zwei Pikaday-Instanzen zur Auswahl eines Datumsbereichs.
picker.setEndRange()
Aktualisieren Sie das Enddatum des Bereichs. Für die Verwendung von zwei Pikaday-Instanzen zur Auswahl eines Datumsbereichs.
Datumsauswahl ein- und ausblenden
picker.isVisible()
Rückgabe von true
oder false
.
picker.show()
Den Picker sichtbar machen.
picker.adjustPosition()
Die Position des Pickers neu berechnen und ändern.
picker.hide()
Den Picker ausblenden und unsichtbar machen.
picker.destroy()
Den Picker ausblenden und alle Event-Listener entfernen – kein Zurück mehr!
Internationalisierung
Das Standardkonfigurationsformat i18n
sieht wie folgt aus:
i18n: { previousMonth : 'Previous Month', nextMonth : 'Next Month', months : , weekdays : , weekdaysShort : }
Sie müssen 12 Monate und 7 Wochentage (mit Abkürzungen) angeben. Geben Sie die Wochentage immer in dieser Reihenfolge an, den Sonntag zuerst. Sie können die Option firstDay
ändern, um die Reihenfolge bei Bedarf zu ändern (0: Sonntag, 1: Montag usw.). Sie können auch isRTL
auf true
für Sprachen setzen, die von rechts nach links gelesen werden.
Erweiterungen
Timepicker
Pikaday ist ein reiner Datepicker. Er unterstützt nicht die Auswahl einer Tageszeit. Es gab jedoch Bestrebungen, Pikaday eine Zeitunterstützung hinzuzufügen, siehe #1 und #18. Diese befinden sich in einem eigenen Fork.
Sie können die Arbeit verwenden, die @owenmead zuletzt unter owenmead/Pikaday gemacht hat.Eine einfachere Zeitauswahl, die von @xeeali unter xeeali/Pikaday gemacht wurde, basiert auf Version 1.2.0.Auch @stas hat einen Fork stas/Pikaday, der aber schon ziemlich alt ist
Browser-Kompatibilität
- IE 7+
- Chrome 8+
- Firefox 3.5+
- Safari 3+
- Opera 10.6+
Autoren
- David Bushell https://dbushell.com @dbushell
- Ramiro Rikkert GitHub @RamRik
Danke an @shoogledesigns für den Namen.