在angularJS输入中将最小日期设置为当前日期

Posted

技术标签:

【中文标题】在angularJS输入中将最小日期设置为当前日期【英文标题】:Set min date to current date in angularJS input 【发布时间】:2015-03-16 20:55:33 【问题描述】:

在 AngularJS 中,我们如何将 input type="date"min 属性设置为当前日期(今天)?

<input type="date" ng-model="data.StartDate" name="StartDate" min=?? />

编辑1

我做了下面的建议并在控制器中添加了这个 -

$scope.currentDate = new Date();

这在 html 中 -

<input type="date" ng-model="data.StartDate" name="StartDate" required min="currentDate | date:'yyyy-MM-dd'" />
<span ng-show="form.StartDate.$dirty && form.StartDate.$invalid">
    <span ng-show="form.StartDate.$error.required">Start Date is required</span>
    <span ng-show="form.StartDate.$error.min">Start Date should not be less than current date</span>
</span>

现在,不允许选择小于 2015 年的年份。此外,如果整个日期小于当前日期,则不会进行验证。所需的验证工作正常。 .min 是正确的字段检查方式吗?

谢谢

【问题讨论】:

function() return new Date(); 【参考方案1】:

是的,您可以设置最小值。根据docs:

<input type="date"
       ng-model=""
       [name=""]
       [min=""]
       [max=""]
       [required=""]
       [ng-required=""]
       [ng-change=""]>

参数

min (可选) string - 如果值为 输入小于分钟。这必须是有效的 ISO 日期字符串 (yyyy-MM-dd)。

编辑 要将字段设置为当前日期:

控制器:

function Ctrl($scope)

    $scope.date = new Date();

查看:

<input type="date" ng-model="data.StartDate" 
        name="StartDate" min="date | date:'yyyy-MM-dd'" />

工作示例here。

【讨论】:

我想设置为当前日期。 它对我有用,用一个例子更新了我的答案。 是的,它是正确的。只是一个问题,你是如何填写表格的?您使用的是相同的 ISO8601 格式,例如:2015-03-10 吗? 虽然我绑定的数据是 yyyy-MM-dd 格式,但它显示的是 dd-MM-yyy 格式。 也许这就是问题所在,虽然我只是在 Safari 上测试过(它不支持日期字段)。以 dd-MM-yyy 格式输入日期可以正常工作。在 Chrome 上有一个日期选择器,它将日期显示为 dd-MM-yyyy,但验证也可以正常工作。【参考方案2】:

根据 Angular 文档

min (optional) string 设置最小验证错误键,如果值 输入小于分钟。这必须是有效的 ISO 日期字符串 (yyyy-MM-dd)。

您可以将其绑定到范围变量或直接将表达式放入属性中,它只需要采用正确的格式(javascript 日期对象具有 toISOString() 方法)。还应注意,这不会阻止用户选择低于最小值的日期,而是设置验证键以指示该字段无效。

编辑:

脚本

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) 
  $scope.name = 'World';
  var today=new Date();
  $scope.today = today.toISOString();
);

HTML

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Hello name!</p>
    <form name="myForm">
    <input type="date" ng-model="StartDate" name="StartDate" required min="today" />
    <span ng-show="myForm.StartDate.$dirty && myForm.StartDate.$invalid">
    <span ng-show="myForm.StartDate.$error.required">Start Date is required</span>
    <span ng-show="myForm.StartDate.$error.min">Start Date should not be less than current date</span>

</span>
</form>
  </body>

</html>

您的错误消息表明您希望日期不大于当前日期,如果是这种情况,只需更改

  <input type="date" ng-model="StartDate" name="StartDate" required min="today" />

  <input type="date" ng-model="StartDate" name="StartDate" required max="today" />

Working Example

【讨论】:

我也有类似的问题!虽然我在选择最小值和最大值。最大值和最小值不应该仍然可以选择吗? I mean they are not greyed out, so they should be okay to select, but when selected an error is still thrown, this is kind of strange.是不是严格比较了最小值和最大值,因此选择它们会导致错误,有没有办法避免这种情况? 我遇到了类似的问题。按照上面提供的步骤,选择回溯日期时会显示错误。但仍然允许在提交时创建记录。还有没有一种方法可以使今天之前的日期无效,即无法选择?【参考方案3】:

正确答案已经在上面, 如果有人在这里寻找 Angular 2/4/5 的解决方案是一种方法,

在你的 .ts 文件中

private todate = new Date();

在您的 html 文件中,

 <input type="date" min="todate | date:'yyyy-MM-dd'" class="form-control" [(ngModel)]="datemodel" id="input-12">

您还可以在此处归档 Angular 中可用的其他格式选项

date formats

【讨论】:

【参考方案4】:

只需添加你的控制器

$scope.today=new Date() // calculates current date

并在您的 html 代码中添加 -

min-date="today"

【讨论】:

【参考方案5】:

 var today = new Date().toISOString().split('T')[0];
        document.getElementsByName("appo_date")[0].setAttribute('min', today);
  <input type="date"  name="appo_date" id="appo_date" ng-model="appoint_data.appo_date"  
          ng-required="true" close-text="Close" uib-datepicker-popup="dd-MMMM-yyyy"  required> 

【讨论】:

尽量避免在答案中发表评论,除非您有“具体细节”的答案。请使用下面的评论框,一旦您有足够的声誉,您就可以对任何帖子发表评论。 :) 你能再看看我的答案吗 感谢 :)

以上是关于在angularJS输入中将最小日期设置为当前日期的主要内容,如果未能解决你的问题,请参考以下文章

在AngularJS指令中将字符串转换为日期

将输入类型日期最小值设置为当前日期角度 12

如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)

如何在 android 日期选择器中将特定选定日期设置为最小日期? [复制]

iPhone,如何在代码中将日期选择器的最小日期设置为今天?

在动态创建的表单后 ajax 调用中将默认值设置为日期选择器