【问题标题】:Display the custom string ("Today") on set date (date=today), in the Angular-UI-Bootstrap Datepicker?在 Angular-UI-Bootstrap Datepicker 中的设置日期(日期=今天)显示自定义字符串(“今天”)?
【发布时间】:2015-04-27 15:15:40
【问题描述】:

我正在将 Angular-UI datepicker 实现为指令,并试图让它将今天的日期显示为字符串“今天”而不是 2015/04/27。

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

【问题讨论】:

  • 我不熟悉 angular datepicker,但你能分别设置 val 和 text 吗?
  • @LiamHT 文本是从ng-model 的文本表示中设置的。我不认为有单独的 text 和 val 可以设置。

标签: javascript angularjs datepicker angular-ui-bootstrap


【解决方案1】:

您可以编写一个过滤器来包装 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);默认格式可以参数化。

注意。如果您准备好自己使用日期呈现输入,则概述的技术将起作用 - 即当您可以选择要使用的过滤器时。它不适用于来自 AngularUI 的即用型 datepicker-popup - 它使用内置的 date 过滤器,除了修改 AngularUI 的源之外似乎没有办法覆盖它。如果弹出是您需要的,则必须自己添加“弹出逻辑”

【讨论】:

  • 我总是可以用来自ng-model 的跨度替换input,对吧?
  • 是的,就像您在问题中链接到的页面上的示例一样。
  • 看起来有一些hackery是可能的:stackoverflow.com/a/18887843/1075247
猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多