¿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).





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á


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();

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


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.


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


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"); ?>">

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


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>

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>

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.


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());

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>

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" />


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'); ?>" />

5

Para NodeJS (Express con plantillas SWIG):

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

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

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!


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.


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"); ?>">


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().


2

por Javascript:

var today = new Date();

document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);

2
new Date().getFullYear()+"-"+ ((parseInt(new Date().getMonth())+1+100)+"").substring(1)

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') %>" />

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>

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.


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.


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 :)


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>

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!


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"  />

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.