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) %>" />
干杯!