Google AMP: selector de fechas
AMP Datepicker es un componente de amplificador que muestra el calendario en la página en la que el usuario puede seleccionar fechas. El selector de fechas AMP se puede mostrar como un calendario estático o según la selección de entrada, es decir, con un clic de un botón.
Para que amp-date-picker funcione, debemos agregar el siguiente script a la página:
<script async custom-element = "amp-date-picker"
src = "https://cdn.ampproject.org/v0/amp-date-picker-0.1.js">
</script>
Etiqueta de selector de fecha Amp
La etiqueta de amp-date-picker tiene el siguiente aspecto:
<amp-date-picker layout = "fixed-height" height = "360"></amp-date-picker>
Atributos admitidos
Los siguientes atributos son compatibles con amp-date-picker:
No Señor | Atributo y descripción |
---|---|
1 | mode Las opciones disponibles son estáticas y superpuestas. Para estática, el calendario se abrirá de forma predeterminada en la página. Para Overlay, el calendario se abrirá al interactuar. |
2 | mode Las opciones disponibles son individuales y de rango. Con single, puede seleccionar solo una fecha en el calendario. Con rango, puede seleccionar más de una fecha pero en un rango continuo. |
3 | input-selector Puede ser un selector de consultas para la entrada de fecha. Por ejemplo, para id es #nameoftheid para clase es. nombredelaclase. La fecha se actualizará para la etiqueta a la que está asignada la identificación. |
4 | start-input-selector Puede ser un selector de consultas para la entrada de fecha. Por ejemplo, para id es #nameoftheid para clase es .nameoftheclass. La fecha se actualizará para la etiqueta a la que está asignada la identificación. |
5 | end-input-selector Puede ser un selector de consultas para la entrada de fecha. Por ejemplo, para id es #nameoftheid para clase es .nameoftheclass. La fecha se actualizará para la etiqueta a la que está asignada la identificación. |
6 | min La fecha más temprana que el usuario puede seleccionar. Debe tener el formato de fecha ISO 8601. Si no hay ningún atributo mínimo, la fecha actual será la fecha mínima. |
7 | max La última fecha que puede seleccionar el usuario. Debe tener el formato de fecha ISO 8601. Si no hay un atributo máximo, el selector de fecha no tendrá una fecha máxima. |
8 | month-format El formato de mes que necesita para mostrar la fecha seleccionada. De forma predeterminada, los valores son "MMMM AAAA". |
9 | format El formato en el que desea que se muestre la fecha en el cuadro de entrada o cualquier elemento HTML cuyo selector se utilice. De forma predeterminada, es "AAAA-MM-DD". |
10 | week-day-format Formato para mostrar el día de la semana. |
11 | locale Configuración regional para mostrar la vista de calendario. Por defecto es en. |
12 | minimum-nights El número de noches que el usuario debe seleccionar en un rango de fechas. El valor predeterminado es "1". Un valor de "0" permite a los usuarios seleccionar la misma fecha para las fechas de inicio y finalización. |
13 | number-of-months El número de meses que se mostrarán a la vez en la vista de calendario. El valor predeterminado es "1". |
14 | first-day-of-week El día que se especificará como primer día de la semana (0-6). El valor predeterminado es "0" (domingo). |
15 | day-size El tamaño en px de las celdas de fecha en la tabla de vista de calendario. El valor predeterminado es 39. |
Los principales atributos son type y mode. pormode, tenemos static y overlaycalendarios de tipo. portype podemos tener single y rangeopciones. Contype = ”single” podemos seleccionar solo una fecha del calendario y para type = ”range” podemos seleccionar más de un dato en un rango.
Ahora, comprendamos amp-date-picker para calendarios de tipo estático y de superposición a través de algunos ejemplos de trabajo.
Selector de fecha estático de AMP
Para el selector de fecha de tipo estático, debemos especificar el modo = estático como se muestra en el siguiente ejemplo.
Ejemplo
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Date-Picker Static </title>
<link rel = "canonical" href = " http://example.ampproject.org/article-metadata.html">
<meta name = "viewport" content = "width = device-width, minimum-scale = 1,initial-scale = 1">
<style amp-boilerplate>
body{
-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
<noscript>
<style amp-boilerplate>
body{-webkit-animation:
none;-moz-animation:none;-ms-animation:none;animation:none}
</style>
</noscript>
<script async custom-element = "amp-date-picker"
src = "https://cdn.ampproject.org/v0/amp-date-picker-0.1.js">
</script>
<script async custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js">
</script>
<script async custom-template = "amp-mustache"
src = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js">
</script>
<style>
input[type = text]{
width: 50%;
padding: 12px;
border: 1px
solid #ccc;
border-radius: 4px;
resize: vertical;
}
label {
padding: 12px 12px 12px 0;display: inline-block;
}
.col-label {
float: left;width: 25%;margin-top: 6px;
}
.col-content {
float: left;width: 75%;margin-top: 6px;
}
.row:after {
content: "";display: table;clear: both;
}
.amp_example {
background-color: #f1f1f1;
padding: 0.01em 16px;
margin: 20px 0;
box-shadow: 0 2px 4px 0
rgba(0,0,0,0.16),0 2px 10px 0
rgba(0,0,0,0.12)!important;
}
h3{font-family: "Segoe UI",Arial,sans-serif;
font-weight: 400;margin: 10px 0;}
</style>
</head>
<body>
<div class = "amp_example">
<h3>Google AMP - Amp Date-Picker using type = single</h3>
<amp-date-picker
id = "static-date"
type = "single"
mode = "static"
layout = "fixed-height"
height = "600"
format = "YYYY-MM-DD"
input-selector = "#date">
<div class = "row">
<div class = "col-label">
<label for = "start">
Date is:
</label>
</div>
<div class = "col-content">
<input type = "text" id = "date" name = "date"
placeholder = "Date Selected Is...">
</div>
</div>
</amp-date-picker>
<div>
</body>
</html>
Observe que en este ejemplo estamos mostrando el calendario, es decir, el selector de fecha por defecto en la pantalla.
La fecha seleccionada por el usuario se muestra en el campo de texto como se muestra en la pantalla de demostración que se muestra a continuación:
Salida
¿Cómo obtener la fecha seleccionada de amp-date-picker?
Si comprueba el ejemplo anterior, hay un atributo llamado input-selectoral que se le da la identificación del campo de texto. Cuando el usuario selecciona la fecha, se muestra dentro del campo de entrada.
<amp-date-picker
id = "static-date"
type = "single"
mode = "static"
layout = "fixed-height"
height = "600"
format = "YYYY-MM-DD"
input-selector = "#date"
<div class = "row">
<div class = "col-label">
<label for = "start">Date is:</label>
</div>
<div class = "col-content">
<input type = "text" id = "date" name = "date"
placeholder = "Date Selected Is...">
</div>
</div>
</amp-date-picker>
También puede dar la propiedad de nombre al atributo selector de entrada de la siguiente manera:
<amp-date-picker
type = "single"
mode = "static"
layout = "container"
input-selector = "[name = date]">
<input type = "text" id = "date" name = "date" placeholder = "Date Selected Is...">
</amp-date-picker>
En caso de que no se proporcione el selector de entrada, amp-date-picker crea un campo de entrada oculto y le da un nombre de date or ${id}-date utilizando la identificación del selector de amp-date.
Discutiremos algunos ejemplos más con diferentes atributos disponibles con el selector de fechas. En lo anterior, podemos seleccionar la fecha única como mencionamostype=”single”y modo como estático. También podemos seleccionar un rango de fechas dando el tipo comotype=”range”.
Ejemplo
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Date-Picker Static </title>
<link rel = "canonical" href = "http://example.ampproject.org/article-metadata.html">
<meta name = "viewport" content = "width = device-width, minimum-scale = 1,initial-scale = 1">
<style amp-boilerplate>
body{-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
<noscript>
<style amp-boilerplate>
body{
-webkit-animation:
none;-moz-animation:none;-ms-animation:none;animation:none}
</style>
</noscript>
<script async custom-element = "amp-date-picker"
src = "https://cdn.ampproject.org/v0/amp-date-picker-0.1.js">
</script>
<script async custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js">
</script>
<script async custom-template = "amp-mustache"
src = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js">
</script>
<style>
input[type = text]{
width: 50%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px;
resize: vertical;
}
label {padding: 12px 12px 12px 0;display: inline-block;}
.col-label {float: left;width: 25%;margin-top: 6px;}
.col-content {float: left;width: 75%;margin-top: 6px;}
.row:after {content: "";display: table;clear: both;}
.amp_example {
background-color: #f1f1f1;
padding: 0.01em 16px;
margin: 20px 0;
box-shadow: 0 2px 4px 0
rgba(0,0,0,0.16),0 2px 10px 0
rgba(0,0,0,0.12)!important;
}
h3{
font-family: "Segoe UI",Arial,sans-serif;
font-weight: 400;margin: 10px 0;
}
</style>
</head>
<body>
<div class = "amp_example">
<h3>Google AMP - Amp Date-Picker Static Multi Select Dates using type = range</h3>
<amp-date-picker
id = "static-date"
type = "range"
mode = "static"
layout = "fixed-height"
height = "600"
start-input-selector = "#start"
end-input-selector = "#end"
format = "YYYY-MM-DD"
input-selector = "#static-date-input">
<div class = "row">
<div class = "col-label">
<label for = "start">Start Date:</label>
</div>
<div class = "col-content">
<input type = "text" id = "start"
name = "start" placeholder = "Start Date">
</div>
</div>
<div class = "row">
<div class = "col-label">
<label for = "end">End Date:</label>
</div>
<div class = "col-content">
<input type = "text" id = "end"
name = "end" placeholder = "End Date">
</div>
</div>
</amp-date-picker>
</div>
</body>
</html>
Salida
La salida del código que se muestra arriba es la que se muestra a continuación:
How to get the start and end date using type= ”range” selected from amp-date-picker?
Para obtener la fecha de inicio y finalización, hemos utilizado el atributo amp-date-picker start-input-selector y end-input-selector.
Los detalles de la sintaxis se muestran aquí:
<amp-date-picker
id = "static-date"
type = "range"
mode = "static"
layout = "fixed-height"
height = "600"
start-input-selector = "#start"
end-input-selector="#end"
format = "YYYY-MM-DD"
input-selector = "#static-date-input">
<input type = "text" id = "start" name = "start" placeholder="Start Date">
<input type = "text" id = "end" name = "end" placeholder = "End Date">
</amp-date-picker>
Ambos selectores tienen una identificación de campo de entrada donde queremos que se muestre la fecha de inicio y finalización. También puede dar el nombre del campo de entrada como se explica aquí.
Selector de fecha de superposición de AMP
Para el selector de fecha del modo Superposición, el calendario se muestra en respuesta al campo de entrada. Podemos tener una superposición con type = ”single” y type = ”range” como hemos visto para el selector de fechas estático.
Veamos ahora un ejemplo práctico de selección de rango de fechas para el selector de fechas de tipo Overlay.
Ejemplo
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<itle>Google AMP - Amp Date-Picker Static</title>
<link rel = "canonical" href = "http://example.ampproject.org/article-metadata.html">
<meta name = "viewport" content = "width = device-width,minimum-scale = 1,initial-scale = 1">
<style amp-boilerplate>
body{
-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
<noscript>
<style amp-boilerplate>
body{
-webkit-animation:
none;-moz-animation:none;-ms-animation:none;animation:none}
</style>
</noscript>
<script async custom-element = "amp-date-picker"
src = "https://cdn.ampproject.org/v0/amp-date-picker-0.1.js">
</script>
<script async custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js">
</script>
<script async custom-template = "amp-mustache"
src = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js">
</script>
<style>
input[type=text]{
width: 50%;
padding: 12px;border:
1px solid #ccc;
border-radius: 4px;resize: vertical;
}
label {
padding: 12px 12px 12px 0;
display: inline-block;
font-family: "Segoe UI",Arial,sans-serif;
font-weight: 400;
}
.col-label {float: left;width: 25%;margin-top: 6px;}
.col-content {float: left;width: 75%;margin-top: 6px;}
.row:after {content: "";display: table;clear: both;}
.amp_example {
background-color: #f1f1f1;
padding: 0.01em 16px;
margin: 20px 0;
box-shadow: 0 2px 4px 0
rgba(0,0,0,0.16),0 2px 10px 0
rgba(0,0,0,0.12)!important;
}
h3{font-family: "Segoe UI",Arial,sans-serif;font-weight: 400;margin: 10px 0;}
button { background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: right;
}
</style>
</head>
<body>
<div class = "amp_example">
<h3>Google AMP - Amp Date-Picker Overlay Multi Select Dates using type = rangelt;/h3>
<amp-date-picker id = "overlay-date"
type = "range"
mode = "overlay"
start-input-selector = "#start"
end-input-selector = "#end"
format = "YYYY-MM-DD"
open-after-select
input-selector = "#start">
<div class = "row">
<div class = "col-label">
<label for = "start">Start Date:lt;/label>
</div>
<div class = "col-content">
<input type = "text" id = "start"
name = "start" placeholder = "Start Date">
</div>
</div>
<div class = "row">
<div class = "col-label">
<label for = "end">End Date:lt;/label>
</div>
<div class = "col-content">
<input type = "text" id="end" name = "end"
placeholder = "End Date">
</div>
</div>
<div class = "row">
<div class = "col-label">
</div>
<div class = "col-content">
<button class = "ampstart-btn caps" on = "tap:overlay-date.clear">
Clear
</button>
</div>
</div>
</amp-date-picker>
</div>
</body>
</html>
Salida
La salida del código que se muestra arriba es la que se muestra a continuación:
Ya hemos visto cómo obtener la fecha de inicio y finalización. Observe que hemos usado un atributo más aquí.open-after-select. Este atributo mantendrá la superposición abierta después de la selección. Si hace clic fuera del selector de fecha, se cerrará. También hay un botón agregado llamado borrar. Al hacer clic en el botón borrar, se borrarán las fechas seleccionadas. La sintaxis para realizar esto es la siguiente:
<button class = "ampstart-btn caps" on = "tap:overlay-date.clear">
Clear
</button>
Para agregar un evento, tenemos que usar onatributo. Más detalles sobre los eventos se discutirán en elEventsCapítulo de este tutorial. Hemos utilizado el comportamiento de la etiqueta y para eso se proporciona la identificación del selector de fechas y el evento claro, que se encarga de borrar el rango de fechas seleccionado.
A continuación, veamos cómo usar amp-date-picker como lightbox.
Selector de fecha de AMP Lightbox
El selector de fecha se puede utilizar dentro de una ventana modal. También podemos usar el selector de fechas de caja de luz para lo mismo. Entendamos esto con la ayuda de un ejemplo práctico.
Para usar el selector de fecha dentro de la caja de luz, necesitamos agregar el script de caja de luz como se muestra a continuación:
<script async custom-element = "amp-lightbox"
src = "https://cdn.ampproject.org/v0/amp-lightbox-0.1.js">
</script>
Ejemplo
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Date-Picker Static </title>
<link rel = "canonical" href = "http://example.ampproject.org/article-metadata.html">
<meta name = "viewport" content = "width=device-width,minimum-scale = 1,initial-scale = 1">
<style amp-boilerplate>
body{
-webkit-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:
-amp-start 8s steps(1,end) 0s 1 normal both;animation:
-amp-start 8s steps(1,end) 0s 1 normal both
}
@-webkit-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes
-amp-start{from{visibility:hidden}to{visibility:visible}}
</style>
<noscript>
<style amp-boilerplate>
body{
-webkit-animation:none;
-moz-animation:none;
-ms-animation:none;
animation:none}
</style>
</noscript>
<script async custom-element = "amp-date-picker"
src = "https://cdn.ampproject.org/v0/amp-date-picker-0.1.js">
</script>
<script async custom-element = "amp-bind" src = "
https://cdn.ampproject.org/v0/amp-bind-0.1.js">
<script>
<script async custom-template = "amp-mustache"
src = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js">
</script>
<script async custom-element = "amp-lightbox"
src = "https://cdn.ampproject.org/v0/amp-lightbox-0.1.js">
</script>
<style>
input[type=text]{
width: 50%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px;
resize: vertical;
}
label {
padding: 12px 12px 12px 0;
display: inline-block;
font-family: "Segoe UI",Arial,sans-serif;
font-weight: 400;
}
.col-label {
float: left;width: 25%;
margin-top: 6px;
}
.col-content {
float: left;
width: 75%;
margin-top: 6px;
}
.row:after {
content: "";
display: table;clear: both;
}
.amp_example {
background-color: #f1f1f1;
padding: 0.01em 16px;
margin: 20px 0;
box-shadow: 0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0rgba(0,0,0,0.12)!important;
}
h3{font-family: "Segoe UI",Arial,sans-serif;
font-weight: 400;
margin: 10px 0;
}
button {
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: right;
}
.lightbox {background-color: rgba(100, 100, 100, 0.5);}
</style>
</head>
<body>
<div class = "amp_example">
<h3>Google AMP - Amp Date-Picker Overlay Multi Select Dates using type = range</h3>
<div class = "row">
<div class = "col-label">
<label for = "start">Start Date:</label>
<div>
<div class = "col-content">
<input type = "text" id = "start" name =
"start" placeholder = "Start Date" on = "tap:lightbox.open">
</div>
</div>
<div class = "row">
<div class = "col-label">
<label for = "end">End Date:</label>
</div>
<div class = "col-content">
<input type = "text" id = "end" name =
"end" placeholder = "End Date" on = "tap:lightbox.open">
</div>
</div>
<div class = "row">
<div class = "col-label"></div>
<div class = "col-content">
<button class = "ampstart-btn caps" on =
"tap:overlay-date.clear">Clear</button>
</div>
</div>
<amp-lightbox id = "lightbox" layout = "nodisplay" class = "lightbox">
<amp-date-picker id = "overlay-date"
type = "range"
layout = "fill"
start-input-selector = "#start"
end-input-selector = "#end"
format = "YYYY-MM-DD"
on = "activate: lightbox.open;deactivate: lightbox.close">
</amp-date-picker>
</amp-lightbox>
</div>
</body>
</html>
Salida
Cuando un usuario hace clic en el campo de entrada, el selector de fecha se abre dentro de la caja de luz como se muestra a continuación:
Para realizar esto, se agrega un evento en el campo de entrada como se muestra a continuación:
<input type = "text" id = "start" name = "start"
placeholder = "Start Date" on = "tap:lightbox.open">
<input type = "text" id = "end" name = "end"
placeholder = "End Date" on = "tap:lightbox.open">
Tenga en cuenta que “on” es el evento que llama tap - lightbox.open para abrir la caja de luz.
Aquí, lightbox es la identificación dada a amp-lightbox como se muestra a continuación. Amp-date-picker se llama dentro de amp-lightbox y se activa al tocar los campos de entrada.
<amp-lightbox id = "lightbox" layout = "nodisplay" class = "lightbox">
<amp-date-picker id = "overlay-date"
type = "range"
layout = "fill"
start-input-selector = "#start"
end-input-selector = "#end"
format = "YYYY-MM-DD"
on = "activate: lightbox.open;deactivate: lightbox.close">
</amp-date-picker>
</amp-lightbox>