Angular 8 - 如何使用 ngxbootstrap/datepicker 仅显示日期和月份

Posted

技术标签:

【中文标题】Angular 8 - 如何使用 ngxbootstrap/datepicker 仅显示日期和月份【英文标题】:Angular 8 - How to show only date and month using ngxbootstrap/datepicker 【发布时间】:2021-11-16 17:29:45 【问题描述】:

我在项目中使用 ngx-bootstrap 日期选择器。

只需要选择日期和月份作为下面的图片/链接

Sample Image To show only date and month like this I needed

我搜索了很多,大多数示例都使用 BsDatePickerConfig 的 minMode 显示月份和年份。 我尝试将 minMode 设置为“day”。它显示正常的日/月/年日历视图。 但我只需要日期和月份,不需要年份

下面是我的代码:

<div class="row">
  <div class="col-xs-12 col-12 col-md-4 form-group">
    <input
      type="text"
      placeholder="Datepicker"
      [bsConfig]="datePickerConfig"
      class="form-control"
      bsDatepicker
    />
  </div>
</div>

和component.ts文件

  datePickerConfig: Partial<BsDatepickerConfig>;
  minMode: BsDatepickerViewMode = 'day';
  constructor() 
    this.datePickerConfig = Object.assign(
      ,
      
        containerClass: 'theme-dark-blue',
        showWeekNumbers: false,
        minMode: this.minMode,
      
    );
  

有没有办法像我的问题一样配置 ngx-bootstrap 日期选择器? 要么 建议任何允许此功能的替代日期选择器。

提前感谢您的宝贵时间...

【问题讨论】:

【参考方案1】:

您可以使用 Angular Material 及其日期选择器,您可以在其中使用具有自定义格式的自定义提供程序:显示和解析执行此任务。此处描述了更多详细信息(连同代码):https://***.com/a/58639587/14556461 它的堆栈闪电战就在这里:https://stackblitz.com/edit/angular-hw54xf.

在 ngx-bootstrap datepicker 中似乎没有直接的选项来执行此操作 - 您需要添加自定义 CSS 或 JS 以在日历中隐藏年份或通过删除适当的 DOM 元素将其完全删除。


更新:从评论中回答您的问题 - 我为您提供了一个使用 CSS 实现此效果的技巧。

将以下规则添加到组件的 CSS 文件中:

::ng-deep.bs-datepicker-head button.current:nth-child(3) 
  display: none;

它选择日历中带有年份的按钮并将其隐藏。

然后您还需要指定应显示哪一年的月份。假设您想要当前年份,您可以按以下方式执行此操作:

您的组件的 html

<input
  type="text"
  #dp="bsDatepicker"
  bsDatepicker
  [(bsValue)]="chosenDate"
  [minDate]="minDate"
  [maxDate]="maxDate"
/>

您的组件的 TS:

export class AppComponent implements OnInit 
  chosenDate: Date;
  minDate: Date;
  maxDate: Date;

  ngOnInit() 
    const currentDate = new Date();
    this.minDate = new Date(currentDate.getFullYear(), 0, 1);
    this.maxDate = new Date(currentDate.getFullYear(), 11, 31);
  

这样,您可以将只能选择的日期限制为当年的日期和月份。

请记住,这是一种 hack(解决方法),可能无法在未来的版本中使用,或者您可能需要对其进行调整以适应未来的版本。另外我建议改进 CSS 规则以避免使用 ::ng-deep,这是不推荐的,但它是单独的主题,您可以在其他地方找到有关此主题的更多信息,我只是想展示这个想法。

Sample Stackblitz:https://stackblitz.com/edit/***-51062003-usatzk(我基于 ngx-bootstrap 的旧版本,而不是您可能使用的版本,因为我在 Stackblitz 上找到了一些 ngx-bootstrap datepicker 示例,所以我将它分叉并更改为显示此解决方案,但它在您的情况下应该是相同的代码或与这个非常相似)

【讨论】:

这是我想要的答案在 ngx-bootstrap datepicker 中没有直接的选择。 谢谢,Pawel 我接受了,还有一件事是选项而不是使用 Angular Material bcoz 我需要为这种情况安装整个材料。 没问题,添加的代码显示了如何使用 ngx-bootstrap datepicker 实现此效果。请记住,这是一种 hack,但应该可以解决问题。 更新后的答案对我的知识及其工作非常有用。谢谢,帕维尔。请为我的声誉投票我的问题:-) 当然,没问题。希望它对其他人也有用(包括:您的问题和答案):)

以上是关于Angular 8 - 如何使用 ngxbootstrap/datepicker 仅显示日期和月份的主要内容,如果未能解决你的问题,请参考以下文章

Angular 8 - 如何使用 ngxbootstrap/datepicker 仅显示日期和月份

如何在 Angular 8 中使用服务实现行为主体

我应该如何在 Angular 8 中为 @ViewChild 使用新的静态选项?

如何使用 Angular 8/9 隐藏 API 密钥? [复制]

如何使用 Postman/curl 和 Angular 8 测试 FCM

如何使用带有xml的angular+8的soap asmx服务