HTML5inputtypesdate – 默认值为今天?

新的HTML5inputtypes非常棒。 Opera的新内置dateselect器是一件轻而易举的事情,Chrome至less支持新的inputtypes和旋转轮实现。

但有没有办法将date字段的默认值设置为今天的date? 使用Opera,我可以从dateselect器中select“今天”,只要点击Chrome中的任一步骤button,它就会从今天的date开始递增/递减。

我并不害怕为这个小问题编写一个解决scheme,但是我觉得这两个浏览器都完全知道当前的date,但是不会自动地将它popup(至less作为占位符)。

与任何HTMLinput字段一样,除非使用value属性指定了默认值,否则浏览器将保留为空。

不幸的是,HTML5没有提供在value属性(我可以看到)中指定“today”的方法,只有像2011-09-29这样的RFC3339有效date。 对不起,这并没有多大帮助!

JavaScript Date对象为所需的格式提供了足够的内置支持,以避免手动进行:

添加此为正确的时区支持:

 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:

 document.getElementById('datePicker').value = new Date().toDateInputValue(); 

这对我有用:

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

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

以下代码运行良好:

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

请注意,这依赖于PHP。

你可以通过JavaScript填充默认值,如下所示: 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); }); 

我可能会花一点时间去查看月份和date是否是单个数字,并用额外的零作为前缀…但这应该给你一个想法。

编辑:增加检查额外的零

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

演示

如果你不想使用jQuery,你可以做这样的事情

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; 

演示

在HTML5中,没有办法将date字段的默认值设置为今天的date? 如其他答案所示,可以使用JavaScript来设置该值,如果您希望根据加载页面时的当前date设置默认值,通常这是最好的方法。

HTML5为input type=date元素定义valueAsDate属性,并且使用它可以直接从例如由new Date()创build的对象中设置初始值。 但是,例如,IE 10不知道这个属性。 (它也没有真正的支持input type=date ,但这是一个不同的问题。)

所以在实践中,你需要设置value属性,它必须是符合ISO 8601的符号表示法。 现在,这可以很容易地完成,因为我们可以期望当前使用的浏览器支持toISOString方法:

 <input type=date id=e> <script> document.getElementById('e').value = new Date().toISOString().substring(0, 10); </script> 

如果您使用PHP,请遵循标准的Ymd格式

 <input type="date" value="<?php echo date("Ymd"); ?>"> 

如果您在浏览器中执行与date和时间相关的任何操作,则需要使用Moment.js :

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

moment()返回表示当前date和时间的对象。 然后调用它的.format()方法根据指定的格式获取string表示forms。 在这种情况下, YYYY-MM-DD

完整的例子:

 <input id="today" type="date"> <script> document.getElementById('today').value = moment().format('YYYY-MM-DD'); </script> 

可能的解决scheme

 document.getElementById("yourDatePicker").valueAsDate = new Date() 

JSFiddle示例

非常简单,只需使用PHP,ASP,JAVA等服务器端语言,甚至可以使用JavaScript。

这是解决scheme

 <?php $timezone = "Asia/Colombo"; date_default_timezone_set($timezone); $today = date("Ymd"); ?> <html> <body> <input type="date" value="<?php echo $today; ?>"> </body> </html> 

如果你需要填写inputdate时间,你可以使用这个:

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

这是我在我的代码中做的,我刚刚testing,它工作正常,inputtypes=“date”不支持自动设置curdate,所以我用来克服这个限制的方式是使用PHP代码这样一个简单的代码。

 <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('Ym-d') . "' required/>"; ?> </form> </body> </html> 

希望它有帮助!

使用moment.js来解决这个问题在2行中,html5的dateinputtypes只接受“YYYY-MM-DD”这种格式。 我这样解决我的问题。

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

这是解决这个问题最简单的方法。

通过Javascript:

 var today = new Date(); document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2); 
 new Date().getFullYear()+"-"+ ((parseInt(new Date().getMonth())+1+100)+"").substring(1) 

由于没有默认方法将值设置为今天的date,我想这应该取决于它的应用。 如果您希望最大化受众对dateselect器的曝光度,请使用服务器端脚本(PHP,ASP等)来设置默认值。

但是,如果是用于CMS的pipe理控制台,并且您知道用户将始终拥有JS或您的站点受信任,那么您可以安全地使用JS来填充默认值,如jlbruno。

我有同样的问题,我用简单的JS修复它。 input:

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

JS

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

重要的是:JS脚本应该在最后一行代码中,或者在input之后,因为如果你之前把这个代码放在脚本中,脚本就不会find你的input。

HTML本身没有默认的方法来将今天的date插入到input字段中。 但是,像任何其他input字段,它将接受一个值。

您可以使用PHP获取今天的date,并将其input到表单元素的值字段中。

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

值字段接受格式YYYY-MM-DD作为input,所以简单地通过创build一个variables$date_string与input值接受相同的格式,并填写从今天的date和voilá获取的年,月和日! 你有自己的预选date!

希望这可以帮助 :)

编辑:

如果您希望将input字段嵌套在HTML而不是PHP中,则可以执行以下操作。

 <?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> 

我意识到这个问题在一段时间以前(2年前)被问到过,但是在网上find一个明确的答案还是花了我一段时间,所以这个服务于所有正在寻找答案的人,并且希望它帮助大家:)

另一个编辑:

几乎忘记了,过去一直是一个皇室的痛苦总是忘记设置默认的时区,每当在PHP中使用date()函数的脚本。

语法是date_default_timezone_set(...); 。 文档可以在PHP.net上find,可以在这里find插入函数的支持的时区列表 。 这是因为我在澳大利亚一直很烦人,如果我没有正确设置,所有事情总是被推迟10个小时,因为它默认为UTC + 0000,所以我需要UTC + 1000,所以只是谨慎:)

感谢彼得,现在我改变了我的代码。

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

这是一个简单的方法来做到这一点与JavaScript。

  var date = new Date(); var datestring = ('0000' + date.getFullYear()).slice(-4) + '-' + ('00' + (date.getMonth() + 1)).slice(-2) + '-' + ('00' + date.getDate()).slice(-2) + 'T'+ ('00' + date.getHours()).slice(-2) + ':'+ ('00' + date.getMinutes()).slice(-2) +'Z'; document.getElementById('MyDateTimeInputElement').value = datestring; 

如果你正在使用ruby,你可以使用它来设置默认值为今天的date和时间:

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

对于NodeJS(Express和SWIG模板):

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

对于那些使用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 %> 

然后在身体中,你的元素应该看起来像这样

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

干杯!

Interesting Posts