【发布时间】:2015-11-29 11:06:57
【问题描述】:
我只有这样简单的一行代码:
<input type='date' min='1899-01-01' max='2000-01-01'></input>
有没有一种简单的方法可以将最大日期设置为“今天”而不是 2000-01-01?还是我必须使用 Javascript 来执行此操作?
【问题讨论】:
标签: html
我只有这样简单的一行代码:
<input type='date' min='1899-01-01' max='2000-01-01'></input>
有没有一种简单的方法可以将最大日期设置为“今天”而不是 2000-01-01?还是我必须使用 Javascript 来执行此操作?
【问题讨论】:
标签: html
您将需要 Javascript 来执行此操作:
HTML
<input id="datefield" type='date' min='1899-01-01' max='2000-13-13'></input>
JS
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd;
}
if (mm < 10) {
mm = '0' + mm;
}
today = yyyy + '-' + mm + '-' + dd;
document.getElementById("datefield").setAttribute("max", today);
【讨论】:
<input id="datefield" type='date' min='1899-01-01' max='2000-13-13' />.
仅 JavaScript 的简单解决方案
datePickerId.max = new Date().toISOString().split("T")[0];
<input type="date" id="datePickerId" />
// below trick also works! Thanks jymbob for the comment.
datePickerId.max = new Date().toLocaleDateString('en-ca')
【讨论】:
type="date" 都没有工作
max iOS Safari 目前不支持它。在此处查看有关此caniuse.com/#search=input%20date 的更新
<form> <input type="date" max='2020-12-15' id="dt" required /><input type="submit" value="Submit" /></form>
today = new Date().toLocaleDateString('en-ca') - 当ISOString() 被解析为 UTC 时,避免了奇怪的一对一问题
代替 Javascript,一个更短的基于 PHP 的解决方案可能是:
<input type="date" name="date1" max="<?= date('Y-m-d'); ?>">
【讨论】:
需要Javascript;例如:
$(function(){
$('[type="date"]').prop('max', function(){
return new Date().toJSON().split('T')[0];
});
});
【讨论】:
toISOString() 将给出当前的 UTC 日期。因此,要获取当前本地时间,我们必须获取 getTimezoneOffset() 并从当前时间中减去它
document.getElementById('dt').max = new Date(new Date().getTime() - new Date().getTimezoneOffset() * 60000).toISOString().split("T")[0];
<input type="date" min='1899-01-01' id="dt" />
【讨论】:
我正在使用带有刀片模板的 Laravel 7.x,并且我使用:
<input ... max="{{ now()->toDateString('Y-m-d') }}">
【讨论】:
date('Y-m-d', strtotime($yourVariable))
是的,也不是。 HTML 5 中有 min 和 max 属性,但是
max 属性不适用于 Internet Explorer 10+ 或 Firefox 中的日期和时间,因为 IE 10+ 和 Firefox 不支持这些输入类型。
编辑:Firefox now does support it
因此,如果您对该属性的文档感到困惑,但它不起作用,那就是原因。
有关版本,请参阅 W3 page。
我发现使用 Javascript 最简单,因为其他答案说,因为您可以只使用预制模块。此外,许多 Javascript 日期选择器库都有最小/最大设置,并具有漂亮的日历外观。
【讨论】:
.split("T")[0] 的替代方案,无需在内存中创建字符串数组,使用String.slice():
new Date().toISOString().slice(0, -14)
datePickerId.max = new Date().toISOString().slice(0, -14);
<input type="date" id="datePickerId" />
【讨论】:
您是否不想使用外部脚本,而是在 HTML 输入元素中设置max 限制,内联如下:
<input type="date" max="3000-01-01" onfocus="this.max=new Date().toISOString().split('T')[0]" />
我故意添加了max 属性和一个遥远的未来,因为一旦设置了max 属性,Chrome 浏览器似乎会更改字段的宽度,所以为了避免这种情况,我预先设置了它-设置。
【讨论】:
<input type="date" min="2050-01-01" onfocus="this.min=new Date().toISOString().split('T')[0]" />
它可能很有用: 如果你想用 Symfony 表单来做:
$today = new DateTime('now');
$formBuilder->add('startDate', DateType::class, array(
'widget' => 'single_text',
'data' => new \DateTime(),
'attr' => ['min' => $today->format('Y-m-d')]
));
【讨论】:
先前答案之一的简短但可能不太可读的版本。
<script type="text/javascript">
$(document).ready(DOM_Load);
function DOM_Load (e) {
$("#datefield").on("click", dateOfBirth_Click);
}
function dateOfBirth_Click(e) {
let today = new Date();
$("#datefield").prop("max", `${today.getUTCFullYear()}-${(today.getUTCMonth() + 1).toString().padStart(2, "0")}-${today.getUTCDate().toString().padStart(2, "0")}`);
}
</script>
【讨论】:
jQuery 和 JavaScript 示例:
$('#arrival_date').attr('min', new Date().toISOString().split('T')[0])
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="date" name="arrival_date" id="arrival_date" class="form-control" aria-label="...">
document.getElementById('arrival_date').setAttribute('min', new Date().toISOString().split('T')[0])
<input type="date" name="arrival_date" id="arrival_date" class="form-control" aria-label="...">
【讨论】:
ejs
使用Node.js、express.js和模板系统ejs:
<input id="picOfDayDate" type="date" name="date-today"
value="<%= new Date().toISOString().split("T")[0] %>"
min='1995-06-16'
max="<%= new Date().toISOString().split("T")[0] %>"
class="datepicker"
>
【讨论】:
我也有同样的问题。我通过这种方式构建它。我使用了 struts 2 框架。
<script type="text/javascript">
$(document).ready(function () {
var year = (new Date).getFullYear();
$( "#effectiveDateId" ).datepicker({dateFormat: "mm/dd/yy", maxDate:
0});
});
</script>
<s:textfield name="effectiveDate" cssClass="input-large"
key="label.warrantRateMappingToPropertyTypeForm.effectiveDate"
id="effectiveDateId" required="true"/>
这对我有用。
【讨论】: