¿Cómo establecer el valor predeterminado de la fecha del tipo de entrada para hoy?

403

Los tipos de entrada HTML5 son geniales, el nuevo selector de fecha incorporado de Opera es muy sencillo, y Chrome al menos ha admitido el nuevo tipo de entrada con una implementación de rueda giratoria.

Pero, ¿hay alguna forma de establecer el valor predeterminado del campo de fecha en la fecha de hoy? Con Opera, puedo elegir 'Hoy' en el selector de fechas, y tan pronto como hago clic en cualquiera de los botones de paso en Chrome, aumenta / disminuye a partir de la fecha de hoy.

No soy tímido para codificar una solución a este problema menor, pero me parece una tontería que ambos navegadores conozcan la fecha actual, pero no la aparecerán automáticamente (al menos como marcador de posición).

Ian Brown
fuente
puede ser esto útil stackoverflow.com/questions/14212527/…
Musa
La solución: stackoverflow.com/a/38801898/3147690
villamejia
44
fecha var = nueva fecha (); // crear objeto de fecha var min_date = date.toISOString (). slice (0,10); //// obtener la parte específica de la fecha actual "2018-02-02"
Günay Gültekin
<input type = "date" value = "AAAA-MM-DD" />
Boris Detry

Respuestas:

288

Al igual que cualquier campo de entrada HTML, el navegador lo dejará vacío a menos que se especifique un valor predeterminado con el valueatributo.

Lamentablemente, HTML5 no proporciona una forma de especificar 'hoy' en el valueatributo (que puedo ver), solo una fecha válida RFC3339 como 2011-09-29.

TL; DR Utilice el YYYY-MM-DDformato de fecha o no se mostrará

Tak
fuente
50
para usuarios de .net: DateTime.Today.ToString ("aaaa-MM-dd")
dvdmn
3
Tenga en cuenta que el '0' delante del mes y el día son necesarios: "2011-09-29" funciona, "2011-9-29" no.
nico
2
Ruby: (También)DateTime.now.strftime("%Y-%m-%d")
Adam Grant
43
@MartinBarker, ¿no sería así, date('Y-m-d')ya que requiere el cero inicial ?
SGR
15
Para JavaScript: myDate.toLocaleDateString('en-CA')¿el truco?
Ulysse BN
218

El objeto Fecha de JavaScript proporciona suficiente soporte integrado para el formato requerido para evitar hacerlo manualmente:

Agregue esto para el soporte de zona horaria correcta:

Date.prototype.toDateInputValue = (function() {
    var local = new Date(this);
    local.setMinutes(this.getMinutes() - this.getTimezoneOffset());
    return local.toJSON().slice(0,10);
});


jQuery:

$(document).ready( function() {
    $('#datePicker').val(new Date().toDateInputValue());
});​


JS puro:

document.getElementById('datePicker').value = new Date().toDateInputValue();
brianary
fuente
1
Tenga cuidado si es compatible con dispositivos móviles. En Android 4.0.3 (al menos) he tenido problemas en los que la nueva fecha seleccionada a través del control de fecha emergente se agrega a la fecha de hoy, en lugar de reemplazarla. Por ejemplo, puede terminar con 2013-03-252013-03-27 en lugar de 2013-03-25, y no hay forma de que el usuario lo cambie.
Ben Clayton
1
@Web_Designer Bastante justo. Querrá ajustarse con local.setMinutes(this.getMinutes() - this.getTimezoneOffset());(como esa respuesta finalmente llega) primero, luego.
brianary
1
Esto solo establece la propiedad de valor , no establece el atributo, por lo que si se restablece el formulario, el valor predeterminado es sin valor. Además, sería mucho más claro usar toISOString , que es lo que toJSON llama de todos modos.
RobG
1
@apraetor En realidad, es al revés, ya que solo los navegadores que admiten entradas de fecha son compatibles valueAsDate(eso excluye IE, Firefox, tal vez Safari, básicamente todo menos Chrome, Opera, Edge y algunos navegadores móviles). Todo es compatible con la valuepropiedad que usa mi solución, incluso cuando las entradas de fecha vuelven a las entradas de texto en los navegadores no compatibles, la otra solución fallará o fallará.
brianary
2
Esta respuesta funcionó para mí usando a input[type=datetime-local]y cambiándola a slice(0,19)HTH
jcruz
189

esto funciona para mi:

document.getElementById('datePicker').valueAsDate = new Date();

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

André
fuente
1
¿funciona en todos los navegadores? y versiones móviles también? Probado?
Usman Younas
2
@UsmanY Es parte de la especificación HTML5, por lo que cualquier cosa que admita los tipos de entrada HTML5 debería ser compatible valueAsDate. html.spec.whatwg.org/multipage/forms.html#dom-input-valueasdate
wersimmon
@harbichidian La propuesta de entrada de fecha es anterior a la propuesta de valueAsDate por un tiempo. ¿Tiene un enlace al soporte del navegador para esa propiedad?
brianary
3
La fecha se convertirá en hora UTC. Si está a las 6 p.m. del 27/03/2018 en -0600 y establece el valor valueAsDatede new Date(), los campos se establecerán en 28/03/2018. Ver austinfrance.wordpress.com/2012/07/09/…
Aupajo
1
Como dijo @Aupajo, esto establece la fecha incorrecta si no desea la hora UTC.
ADJenks
81

El siguiente código funciona bien:

<input type="date" value="<?php echo date('Y-m-d'); ?>" />

Tenga en cuenta que esto se basa en PHP.

Isham Mohamed
fuente
64
Su respuesta depende de php por completo.
Yëco
1
Si su formulario de contacto está en una página PHP (por ejemplo, en una página de WordPress o código abreviado), esto funciona perfectamente. Muchas gracias Isham!
tristanojbacon
55
Puede reducir la redundancia cambiando <?php echo date('Y-m-d', strtotime(date('Y/m/d'))); ?>a<?php echo date('Y-m-d'); ?>
Murray Smith
77
Esto establece la fecha de acuerdo con la fecha de creación (en un servidor, en la zona horaria del servidor) del documento HTML. No es necesario que coincida con la fecha actual, a partir de completar el campo. JavaScript del lado del cliente es mejor si necesita hacer cosas que dependen del lado del usuario.
Jukka K. Korpela
1
también puede usar la etiqueta corta <? = date ('Ym-d'); ?>. Un "eco" menos
sashok_bg
36

Puede completar el valor predeterminado a través de javascript como se ve aquí: http://jsfiddle.net/7LXPq/

$(document).ready( function() {
    var now = new Date();
    var month = (now.getMonth() + 1);               
    var day = now.getDate();
    if (month < 10) 
        month = "0" + month;
    if (day < 10) 
        day = "0" + day;
    var today = now.getFullYear() + '-' + month + '-' + day;
    $('#datePicker').val(today);
});

Probablemente pondría un poco de tiempo extra para ver si el mes y la fecha son de un solo dígito y los prefijo con el cero extra ... pero esto debería darle una idea.

EDITAR: verificación agregada para el cero adicional

Jeff
fuente
En Opera (probado en Opera 12 / Windows) esto no funciona si no pone los ceros iniciales en mes y día.
Renato
31

Siga el formato estándar de Ymd, si está utilizando PHP

<input type="date" value="<?php echo date("Y-m-d"); ?>">
Shuhad Zaman
fuente
2
debes mencionar que esta respuesta funciona si estás usando php, este no es el caso para todos.
Motassem MK
24

HTML

<input type="date" id="theDate">

JS

$(document).ready(function() {
    var date = new Date();

    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    var today = year + "-" + month + "-" + day;       
    $("#theDate").attr("value", today);
});

manifestación

Si no quieres usar jQuery puedes hacer algo como esto

HTML

<input type="date" id="theDate">

JS

var date = new Date();

var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();

if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;

var today = year + "-" + month + "-" + day;       
document.getElementById("theDate").value = today;

manifestación


fuente
22

En HTML5 como tal, ¿no hay forma de establecer el valor predeterminado del campo de fecha en la fecha de hoy? Como se muestra en otras respuestas, el valor se puede establecer usando JavaScript, y este suele ser el mejor enfoque si desea establecer el valor predeterminado de acuerdo con la fecha actual para el usuario cuando se carga la página.

HTML5 define la valueAsDatepropiedad de los input type=dateelementos y, al usarla, puede establecer el valor inicial directamente desde un objeto creado, por ejemplo, por new Date(). Sin embargo, por ejemplo, IE 10 no conoce esa propiedad. (También carece de soporte genuino input type=date, pero ese es un problema diferente).

Por lo tanto, en la práctica, debe establecer la valuepropiedad, y debe estar en notación conforme a ISO 8601. Hoy en día esto se puede hacer con bastante facilidad, ya que podemos esperar que los navegadores utilizados actualmente admitan el toISOStringmétodo:

<input type=date id=e>
<script>
document.getElementById('e').value = new Date().toISOString().substring(0, 10);
</script>
Jukka K. Korpela
fuente
66
O si quieres que sea compatible con Y10K:= new Date().toISOString().split('T')[0];
Blazemonger
1
toISOString devuelve una fecha y hora UTC, por lo que es posible que no muestre la fecha correcta para la zona horaria del usuario. Por ejemplo, si el usuario es UTC + 0800, desde la medianoche hasta las 08:00 obtendrán la fecha de ayer.
RobG
18

Si está haciendo algo relacionado con la fecha y la hora en el navegador, desea usar Moment.js :

moment().format('YYYY-MM-DD');

moment()devuelve un objeto que representa la fecha y hora actuales. Luego llama a su .format()método para obtener una representación de cadena de acuerdo con el formato especificado. En este caso,YYYY-MM-DD ,.

Ejemplo completo:

<input id="today" type="date">
<script>
document.getElementById('today').value = moment().format('YYYY-MM-DD');
</script>
Gabriel García
fuente
Si ya tiene moment () disponible o planea hacer más trabajo de citas en su aplicación web, esta solución es obvia. Momento resuelve muchos problemas.
secretwep
10

use moment.js para resolver este problema en 2 líneas, el tipo de entrada de fecha html5 solo acepta "AAAA-MM-DD" en este formato. Resuelvo mi problema de esta manera.

var today = moment().format('YYYY-MM-DD');
 $('#datePicker').val(today);

Esta es la forma más sencilla de resolver este problema.

Umair Khalid
fuente
8

Javascript

document.getElementById('date-field').value = new Date().toISOString().slice(0, 10);

Jquery

$('#date-field').val(new Date().toISOString().slice(0, 10));

Otra opción

Si desea personalizar la fecha, el mes y el año, simplemente haga una suma o un sub como desee 😎 Para el mes se inicia el formulario 0, por eso es necesario sumar 1 con el mes.

function today() {
        let d = new Date();
        let currDate = d.getDate();
        let currMonth = d.getMonth()+1;
        let currYear = d.getFullYear();
        return currYear + "-" + ((currMonth<10) ? '0'+currMonth : currMonth )+ "-" + ((currDate<10) ? '0'+currDate : currDate );
    }

Appy la función de hoy

document.getElementById('date-field').value = today();

$('#date-field').val(today());
MD Iyasin Arafat
fuente
7

Muy simple, solo use lenguajes del lado del servidor como PHP, ASP, JAVA o incluso puede usar javascript.

Aquí esta la solución

<?php
  $timezone = "Asia/Colombo";
  date_default_timezone_set($timezone);
  $today = date("Y-m-d");
?>
<html>
  <body>
    <input type="date" value="<?php echo $today; ?>">
  </body>
</html>
teshguru
fuente
7
<input id="datePicker" type="date" />

$(document).ready( function() {
    var now = new Date();
 
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);

    var today = now.getFullYear()+"-"+(month)+"-"+(day) ;


   $('#datePicker').val(today);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="datePicker" type="date" />

Santanu
fuente
5

si necesita completar la fecha y hora de entrada, puede usar esto:

<input type="datetime-local" name="datetime" 
       value="<?php echo date('Y-m-d').'T'.date('H:i'); ?>" />
usuario2615287
fuente
5

Para NodeJS (Express con plantillas SWIG):

<input type="date" id="aDate" name="aDate" class="form-control" value="{{ Date.now() | date("Y-m-d") }}" />
CodeValve
fuente
5

Las soluciones más simples parecen pasar por alto que se utilizará la hora UTC, incluidas las altamente votadas. A continuación se muestra una versión simplificada, ES6, no jQuery de un par de respuestas existentes:

const today = (function() {
    const now = new Date();
    const month = (now.getMonth() + 1).toString().padStart(2, '0');
    const day = now.getDate().toString().padStart(2, '0');
    return `${now.getFullYear()}-${month}-${day}`;
})();
console.log(today); // as of posting this answer: 2019-01-24
Dexygen
fuente
Debe indicar a qué propiedad de un elemento de entrada asignarle. valueo valueAsDate? Aunque se ve bien.
ADJenks
4

Esto es lo que hice en mi código, lo acabo de probar y funcionó bien, input type = "date" no es compatible para configurar curdate automáticamente, por lo que la forma en que solía superar esta limitación era usar un código PHP como un código simple como este .

<html>
<head></head>
    <body>
        <form ...>
            <?php
                echo "<label for='submission_date'>Data de submissão</label>";
                echo "<input type='date' name='submission_date' min='2012-01-01' value='" . date('Y-m-d') . "' required/>";
            ?>
        </form>
    </body>
</html>

¡Espero eso ayude!

Gumba
fuente
1
Hola y bienvenido a SO, agregue más información para admitir su código y asegúrese de que la persona que hace la pregunta desee una solución basada en PHP.
Shiva
4

Ambas respuestas principales son incorrectas.

Un breve resumen que utiliza JavaScript puro, representa la zona horaria local y no requiere funciones adicionales para definir:

const element = document.getElementById('date-input');
element.valueAsNumber = Date.now()-(new Date()).getTimezoneOffset()*60000;
<input id='date-input' type='date'>

Esto obtiene la fecha y hora actual en milisegundos (desde época) y aplica el desplazamiento de la zona horaria en milisegundos (minutos * 60k minutos por milisegundo).

Puede establecer la fecha usando element.valueAsDatepero luego tiene una llamada adicional al Date()constructor.

rovyko
fuente
4

Esto es algo que realmente necesita hacer en el lado del servidor, ya que el formato de hora local de cada usuario difiere, sin mencionar que cada navegador se comporta de manera diferente.

El valor de las entradas de fecha HTML debe estar en este formato: aaaa-mm-dd, de lo contrario no mostrará un valor.

ASP CLÁSICO, O VBSCRIPT:

current_year = DatePart("yyyy",date) 
current_month = DatePart("m",date) 
current_day = DatePart("d",date) 

IF current_month < 10 THEN
current_month = "0"&current_month
END IF
IF current_day < 10 THEN
current_day = "0"&current_day
END IF

get_date = current_year&"-"&current_month&"-"&current_day
Response.Write get_date

Salida de la fecha de hoy: 2019-02-08

Luego en tu html: <input type="date" value="<% =get_date %>"

PHP

solo usa esto: <input type="date" value="<?= date("Y-m-d"); ?>">

csandreas1
fuente
4

Esto es muy simple aplicando el siguiente código, Usando PHP

<input type="date" value="<?= date('Y-m-d', time()); ?>" />

La función de fecha devolverá la fecha actual, tomando la fecha en time().

Gowtham Ag
fuente
2

por Javascript:

var today = new Date();

document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);
Charnstyle
fuente
2
new Date().getFullYear()+"-"+ ((parseInt(new Date().getMonth())+1+100)+"").substring(1)
Kingsuede
fuente
1
Por favor agregue una descripción con su respuesta.
bawa g
1

Si está usando ruby, puede usar esto para establecer el valor predeterminado en la fecha y hora de hoy:

<input type="datetime-local" name="time" value="<%= Time.now.strftime('%Y-%m-%dT%H:%M') %>" />
Sean
fuente
1

Una solución simple:

<input class="set-today" type="date">
<script type="text/javascript">
    window.onload= function() {
        document.querySelector('.set-today').value=(new Date()).toISOString().substr(0,10));
    }
</script>
gajam
fuente
1
@GeorgeJempty Esto no ocurre si la hora actual en UTC es un día diferente al día actual. Devolverá la fecha actual en UTC, no en su zona horaria local.
ADJenks
@adjenks Heh, veo que fue un momento perfecto para hacer la prueba, 10 minutos hasta la medianoche
Dexygen
@adjenks Finalmente eliminé media docena de líneas que evitan la trampa UTC y mejoran ligeramente un par de respuestas jQuery / non-ES6 similares existentes: stackoverflow.com/a/54341296/34806
Dexygen
La respuesta tiene un ")" extra al final de la línea y elementos parentales extraños alrededor de "nueva Fecha ()". Debería ser: document.querySelector('.set-today').value=new Date().toISOString().substr(0,10);
Kirby L. Wallace
0

Como no existe un método predeterminado para establecer el valor en la fecha de hoy, diría que esto debería depender de su aplicación. Si está buscando maximizar la exposición de su audiencia al selector de fechas, use un script del lado del servidor (PHP, ASP, etc.) para establecer el valor predeterminado.

Sin embargo, si es para la consola de administración del CMS, y sabe que el usuario siempre tendrá JS en su sitio o de confianza, entonces puede usar JS de manera segura para completar el valor predeterminado, según jlbruno.

Stslavik
fuente
0

Tuve el mismo problema y lo solucioné con JS simple. La entrada:

<input type="date" name="dateOrder" id="dateOrder"  required="required">

el JS

<script language="javascript">
document.getElementById('dateOrder').value = "<?php echo date("Y-m-d"); ?>";
</script>

Importante: el script JS debe estar en la última línea de código, o después de ingresar, porque si coloca este código antes, el script no encontrará su entrada.

Marlon
fuente
2
Si está utilizando PHP de todos modos, ¿por qué molestarse con JavaScript ?
Blazemonger
0

No hay un método predeterminado dentro del propio HTML para insertar la fecha de hoy en el campo de entrada. Sin embargo, como cualquier otro campo de entrada, aceptará un valor.

Puede usar PHP para recuperar la fecha de hoy e ingresarla en el campo de valor del elemento de formulario.

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";

    // Send to the browser the input field with the value set with the date string
    echo "<input type='date' value='$date_string' />";
?>

El campo de valor acepta el formato AAAA-MM-DD como entrada, simplemente creando una variable $date_string en el mismo formato que acepta el valor de entrada y complételo con el año, mes y día recuperados de la fecha de hoy y ¡listo! ¡Tienes una fecha preseleccionada!

Espero que esto ayude :)

Editar:

Si desea tener el campo de entrada anidado dentro de HTML en lugar de PHP, puede hacer lo siguiente.

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";
?>
<html>
    <head>...</head>
    <body>
        <form>
            <input type="date" value="<?php print($date_string); ?>" />
        </form>
    </body>
</html>

Me doy cuenta de que esta pregunta se hizo hace un tiempo (hace 2 años), pero todavía me llevó un tiempo encontrar una respuesta definitiva en Internet, por lo que sirve para cualquier persona que esté buscando la respuesta siempre que sea posible y espero que sea ayuda a todos enormemente :)

Otra edición:

Casi lo olvido, algo que ha sido un dolor real para mí en el pasado siempre se olvida de establecer la zona horaria predeterminada cada vez que crea un script en PHP que hace uso de la función date ().

La sintaxis es la siguiente date_default_timezone_set(...);. La documentación se puede encontrar aquí en PHP.net y la lista de zonas horarias compatibles para insertar en la función se puede encontrar aquí . Esto siempre fue molesto ya que estoy en Australia, todo se retrasa 10 horas si no lo configuré correctamente, ya que por defecto es UTC + 0000 donde necesito UTC + 1000, así que tenga cuidado :)

SteppingHat
fuente
0

Gracias Peter, ahora cambio mi código.

<input type='date' id='d1' name='d1'>

<script type="text/javascript">
var d1 = new Date();
var y1= d1.getFullYear();
var m1 = d1.getMonth()+1;
if(m1<10)
    m1="0"+m1;
var dt1 = d1.getDate();
if(dt1<10)
dt1 = "0"+dt1;
var d2 = y1+"-"+m1+"-"+dt1;
document.getElementById('d1').value=d2;
</script>
Nikhil SHETH
fuente
3
Por favor, por favor, no use document.write en aplicaciones reales, hay tantos problemas al usarlo.
Peter Hart
Peter, ¿puedes explicar qué problema? tu tienes ?
Nikhil SHHET
Peter, también menciona cómo obtienes la fecha actual como valor predeterminado en input type = date
Nikhil sHETH
1
No es que no funcione, sino que, en general, es una mala práctica usar document.write. Hay una gran cantidad de razones por las cuales este es el caso, aquí hay algunos ejemplos: stackoverflow.com/questions/802854/… Si tuviera que hacer esto absolutamente en JavaScript en el cliente, usaría una identificación en el elemento y el documento. getElementById para obtener el elemento y cambiarlo, de manera similar a algunas de las otras respuestas en esta página.
Peter Hart
0

Y para aquellos que usan ASP VBScript

<%
'Generates date in yyyy-mm-dd format
Function GetFormattedDate(setDate)
strDate = CDate(setDate)
strDay = DatePart("d", strDate)
strMonth = DatePart("m", strDate)
strYear = DatePart("yyyy", strDate)
If strDay < 10 Then
  strDay = "0" & strDay
End If
If strMonth < 10 Then
  strMonth = "0" & strMonth
End If
GetFormattedDate = strYear & "-" & strMonth & "-" & strDay
End Function
%>

Y luego en el cuerpo, tu elemento debería verse así

<input name="today" type="date" value="<%= GetFormattedDate(now) %>" />

¡Salud!

Ryan Dunphy
fuente
0

Incluso después de todo este tiempo, podría ayudar a alguien. Esta es una solución simple de JS.

JS

  let date = new Date();
  let today = date.toISOString().substr(0, 10);
  //console.log("Today: ", today);//test
  document.getElementById("form-container").innerHTML =
    '<input type="date" name="myDate" value="' + today + '" >';//inject field

HTML

 <form id="form-container"></form>

Una solución similar funciona en Angular sin ninguna biblioteca adicional para convertir el formato de fecha. Para Angular (el código se acorta debido al código de componente común):

//so in myComponent.ts 
//Import.... @Component...etc...
date: Date = new Date();
today: String; //<- note String
//more const ...
export class MyComponent implements OnInit {
   //constructor, etc.... 
   ngOnInit() {
      this.today = this.date.toISOString().substr(0, 10);
   }
}
//so in component.html 
<input type="date" [(ngModel)]="today"  />
StefaDesign
fuente
Esto es demasiado engorroso para solo necesitar usar un valor predeterminado.
reformado el
¿Cuál de los dos ejemplos independientes está intentando señalar? Sus 4 líneas de códigos en ambos ejemplos ... El primer ejemplo es puro html + js, así que cree un contenedor y copie el código de pegar sus 3 líneas si no cuenta los comentarios. Lo mismo para el ejemplo angular, que fue la razón por la que dejé comentarios. No estoy seguro de lo que
querías