【问题标题】:Show future date using javascript in dropdown. (dynamically each time)在下拉列表中使用 javascript 显示未来日期。 (每次动态)
【发布时间】:2016-03-16 19:30:54
【问题描述】:

我有 jsfiddle http://jsfiddle.net/92yv2h9n/

如您所见,下拉菜单的第一个选项显示当前日期。接下来的两个选项应该显示未来的日期。

例如,今天是 12 月 11 日。因此应显示 12 月 12 日和 13 日的未来日期。目前它仅显示当前日期。它的格式为 mm-dd-yyyy。

有人可以强调我如何才能实现未来的日期。

PS- 应该自动注意到 2 月有 28 天,12 月有 31 天,依此类推。

这里是代码。

JS代码

function Ctrl($scope) {
$scope.date = new Date();
}

HTML 代码

<div ng-app ng-controller="Ctrl">
<select>
<option>{{date | date:'MM-dd-yyyy'}}</option>
<option>{{date | date:'MM-dd-yyyy'}}</option>
<option>{{date | date:'MM-dd-yyyy'}}</option>
</select>
</div>

【问题讨论】:

    标签: javascript jquery html angularjs date


    【解决方案1】:

    将日期转换为毫秒并在其上添加一天毫秒(或第二个天为 2 天):

    <div ng-app ng-controller="Ctrl">
      <select>
        <option>{{date.getTime() | date:'MM-dd-yyyy'}}</option>
        <option>{{(date.getTime() + (1000 * 60 * 60 * 24)) | date:'MM-dd-yyyy'}}</option>
        <option>{{(date.getTime() + (1000 * 60 * 60 * 48)) | date:'MM-dd-yyyy'}}</option>
      </select>
    </div>
    

    使用 ng-repeat 的更短版本:

    <div ng-app ng-controller="Ctrl">
      <select>
        <option ng-repeat="date in [0,1,2]">{{date.getTime() + (1000 * 60 * 60 * 24 * day)| date:'MM-dd-yyyy'}}</option>
      </select>
    </div>
    

    避开周末:

    <div ng-app ng-controller="Ctrl">
      <select>
        <option ng-repeat="day in dates">{{date | date:'MM-dd-yyyy'}}</option>
      </select>
    </div>
    

    控制器:

    function Ctrl($scope) {
        $scope.baseAdd = 0;
      $scope.dates = [0,1,2].map(function(day) {
        dateobj = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * (day + $scope.baseAdd)));
            while(dateobj.getDay() == 6 || dateobj.getDay() == 0) {
          dateobj = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * (day + $scope.baseAdd++)));
        }
        console.log(dateobj)
        return dateobj;
    });
    }
    

    【讨论】:

    • 我会仔细检查是否在夏令时有效。
    • DST 将依赖于用户本地时间对象中 Date() 的构造结果。这个函数总是会返回 + 24 小时的毫秒数。所以我想每个时区每年都有一个小时的时间来观察 dst 这将返回 Today |今天 + 2 |今天+ 3。我可以想象如何解决这个问题,但这是一个相当复杂的解决方案。
    • 这种逻辑在 dom 中可能可行,但在控制器中更容易管理。如果您正在寻找它,我建议您在控制器中制作 3 个日期对象,将日期添加到每个对象中,然后检查 dateObj.getDay() > 4
    • 非常抱歉,ng-repeat 不正确——现在可以使用:jsfiddle.net/92yv2h9n/1
    • 我猜您正在使用“use strict”——这会使事情稍微复杂化,因为您需要确保使用 var(或 let)设置变量,这会改变范围和可用性——我更新了小提琴以使我的解决方案严格执行,但您可能必须针对您的情况做一些特定的事情。 jsfiddle.net/t3vBE/4
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多