在 Angular-UI-Bootstrap 日期选择器中显示设置日期 (date=today) 的自定义字符串 ("Today")?

Display the custom string ("Today") on set date (date=today), in the Angular-UI-Bootstrap Datepicker?

我正在实施 Angular-UI datepicker 作为指令,我试图让它以字符串 'Today' 而不是 2015/04/27 的形式显示今天的日期。

这可能吗?我可以轻松地将 $scope.dt 更改为 "Today" 但是如果我想将其保存到我的数据库中,我将需要将其转换回来,这很麻烦。它看起来像是一种自定义格式....但我无法从此处的代码中看出如何做到这一点?

您可以编写一个过滤器来包装 AngularJS 提供的原始 date 过滤器并接受自定义格式,如果格式是默认格式或传递日期不是今天,则将格式转发到 date . 这是一个草图:

.filter('my_date', ['dateFilter', function (dateFilter) {
    function filter(date, format, timezone) {
        var today  = new Date();
        if (!(date instanceof Date)) {
            date = new Date(date);
        }

        if (format == "today") {
            if (date.getFullYear() == today.getFullYear() && date.getMonth() == today.getMonth() && date.getDate() == date.getDate()) {
                return "Today";
            } else {
                format = "yyyy/mm/dd"; // this is default
            }
        }

        return dateFilter(date, format, timezone);
    }
    return filter;
}])

使用:

{{dt | my_date:'today'}}

这里有改进的余地:您可以查看更专门的程序,用于将 AngularJS 源中传递到过滤器的任何内容转换为日期(它特别接受 JSON);默认格式可以参数化。

注意。如果您准备好自己渲染带有日期的输入,则概述的技术将起作用 - 即您可以 select 使用哪个过滤器。它不适用于 AngularUI 的即用型 datepicker-popup - 它使用内置的 date 过滤器,除了修改 AngularUI 的源代码之外,似乎没有办法覆盖它。如果弹出窗口是你需要的,你必须自己添加 "popup logic"