繁体   English   中英

如何在 Angular 6 中格式化日期?

[英]How to format dates in Angular 6?

我有一个功能可以显示用户输入的实时日期,现在当用户输入输入时,我在前端显示了这样的内容[日期]:

28.10.2018 10:09

我希望日期更改为过去几天、过去一周、过去一年等

所以如果昨天输入了输入,我想显示如下内容:

1d表示一天前,同样适用于年 ( 1y )、周 ( 1w ) 等。

这是我迄今为止尝试过的:

这是获取日期及其输入文本的函数

 this.activeRouter.params.subscribe((params) => {

        let id = params['id'];
        this.userService.getComments(id)
        .pipe(
          map(data => data.sort((a, b) => new Date(b.localTime).getTime() - new Date(a.localTime).getTime()))
        )
        .subscribe(data => this.comments = data);
        });

他这里是向服务器添加文本输入和日期的功能

     addComments(task_id) {
        const formData = this.addForm.value;
        formData.task_id = task_id;
        this.userService.addComments(formData)
        .subscribe(data => {
          this.comments.push(this.addForm.value);
          this.addForm.reset();
        });
        const date = new Date();
        const d = date.getUTCDate();
        const day = (d < 10) ? '0' + d : d;
        const m = date.getUTCMonth() + 1;
        const month = (m < 10) ? '0' + m : m;
        const year = date.getUTCFullYear();
        const h = date.getUTCHours();
        const hour = (h < 10) ? '0' + h : h;
        const mi = date.getUTCMinutes();
        const minute = (mi < 10) ? '0' + mi : mi;
        const sc = date.getUTCSeconds();
        const second = (sc < 10) ? '0' + sc : sc;
        const loctime = `${year}-${month}-${day}T${hour}`;

        this. addForm.get('localTime').setValue(loctime);

}

这是用于显示前端 HTML 的 html:

<div class="comments_details">
              <h1>Mike Ross</h1>
              <span class="days">{{comment.localTime | date:'dd.MM.yyyy H:mm'}}</span>
            </div>

这是用于抓取数据并将其添加到服务器的服务功能

  addComments(comments: Comment) {
    comments.localTime = new Date();
    return this.http.post(this.commentsUrl, comments);
  }
  getComments(id: number) {
    return this.http.get<Comment[]>(this.commentsUrl);
  }

我需要在代码中更改什么才能获得我想要的格式?

我同意 Moment 是在 JavaScript 中处理日期的方法。

我在这里有几个简单的角度示例:

https://stackblitz.com/edit/angular-moment-example

如果您需要我添加任何特定于该示例的内容,我很乐意这样做。

编辑

我更新了 StackBlitz 的一个功能来输出“天、年等”。 很简单,你可以利用.humanize()函数

this.humanized = moment.duration(moment().diff(this.startDate)).humanize();

这里没有硬编码......我添加了更多示例,所以希望它开始有意义。

this.humanized = moment.duration(moment().diff(this.startDate)).humanize();
this.humanizedNow = moment.duration(moment().diff(moment())).humanize();

// if you need to force to number of days
this.daysFrom2017 = this.currentDate.diff(moment('1/1/2017'), 'days');

// if you need to force to number of weeks
this.weeks = moment().diff(this.startDate, 'week');

您可以强制使用它或只使用 humanize() 方法,我相信这是您想要的,如果您需要覆盖默认值以更新人性化的单词,您甚至可以设置阈值。

https://momentjscom.readthedocs.io/en/latest/moment/08-durations/03-humanize/

然而,它似乎还没有支持自动转换为周,但它看起来很快就会出现,这是将添加该功能的更新/拉取请求:

https://github.com/moment/moment/pull/4570/files

但它目前支持除几周之外的所有内容

我认为你不应该在角度上使用时刻。 它不是树可摇晃的,会让你的包变得很大。 你应该看看 date-fns 或 date.js。

查看 Moment.js 以获取“1 周前”或“几秒前”等输出。

您可以在@angular/common使用formatDate 参考这个链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM