【问题标题】:moment.calendar shows today as the day instead of 5 days agomoment.calendar 将今天显示为当天而不是 5 天前
【发布时间】:2019-02-17 10:01:25
【问题描述】:

我有以下代码

import * as moment from 'moment';
import 'moment-duration-format';
....

public static formatTime(dateTime: Date): string {  
        // To test am subtracting 5 days from today..
        dateTime.setDate(dateTime.getDate() - 5);

        // dateTime now show Tuesday, which is correct
        let result = moment().calendar(dateTime);

        // Result show Sunday! (wrong)
        return result;
      }

我减去 5 天只是为了测试 calendar() 格式。

从调试器...

可以看出,calendar() 显示的是星期日(即今天),但应该是星期二。

有没有人知道任何解决方法?

提前感谢您的帮助!

[更新1]

添加了这个here的示例(plunker)

查看 script.js 的代码。

【问题讨论】:

  • let result = moment().calendar(dateTime.getDate()); 这对我有用。
  • 我实际上是在日期和时间之后,以及moment给出的描述(例如'5天前')
  • 那么,我的回答对你没有帮助?

标签: javascript angular momentjs


【解决方案1】:

如果你给 setDate 函数 5:

dateTime.setDate(dateTime.getDate() - 5);

你得到了正确的时间 - 5 毫秒。

要在 X 天前获得,您需要付出:

let today  = new Date()
5DaysAgo = new Date(today .getTime() - (5 * 24 * 60 * 60 * 1000)); 

【讨论】:

  • 我在 Google 上搜索了如何减去天数,并建议使用 dateTime.setDate(dateTime.getDate() - 5);。然而,即使有上述情况,时刻仍然给出错误的答案。见演示here
【解决方案2】:

既然你在使用moment,为什么不直接使用呢?特别是,不要操纵Date,而是使用矩减去5天...

console.log(moment(new Date()).subtract(5, 'days').calendar());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>

【讨论】:

  • 我实际上并不想减去 5 天,这只是我目前的测试。给定任何日期的日历。见例子here
【解决方案3】:

试试

 let result = moment().calendar(dateTime.getDate());

【讨论】:

  • 如果有人对评论投反对票,那就太好了
  • 请问是什么原因?
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2013-07-23
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多