当前位置: 首页 > 知识库问答 >
问题:

Moment js日期时间比较

吴修洁
2023-03-14

我正在使用moment.js格式化我的日期时间,这里我有两个日期值,当一个日期大于另一个时,我想实现一个特定的函数。我读了他们的大部分文档,但没有找到实现这一点的函数。我知道它会在那里。

这是我的代码:

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date 

var now = new Date(),
    dnow = moment(now).tz('UTC'),
    snow = dnow.minute() % 15,
    diffnow = 15 - snow,
    tonow = moment(dnow).add('minute', diffnow),
    ahead30now = moment(tonow).add('minute', 30);

if (d > ahead30now) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}

编辑

var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
    console.log('is after true');
} else {
    console.log('is after is false');
}

在这里,我比较了两个日期,即2014-03-24T01:15:000>2014-03-24T01:14:000,希望第一个日期大于第二个日期,但它总是转到else条件。我不知道为什么?

共有1个答案

梁丘波鸿
2023-03-14

我相信您正在查找查询函数isBeforeissameisAfter

但要确切地说出你在尝试什么有点困难。也许你只是想知道输入时间和当前时间之间的差异?如果是,请考虑差分函数diff。例如:

moment().diff(date_time, 'minutes')

还有几件事:

>

  • 第一行中有一个错误:

      var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
    

    那是行不通的。我想你的意思是:

      var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';
    

    当然,你不妨:

      var date_time = '2013-03-24T10:15:20:12Z';
    

    您使用的:.tz('utc')不正确。.tz属于矩时区。除非您正在处理其他时区,如America/Los_Angeles,否则您不需要使用它。

    如果要将值解析为UTC,则使用:

      moment.utc(theStringToParse)
    

    或者,如果希望解析一个本地值并将其转换为UTC,则使用:

      moment(theStringToParse).utc()
    

    或者你根本不需要它。仅仅因为输入值是UTC,并不意味着您必须在整个函数中使用UTC。

    您似乎正在通过时刻(new Date())获得“now”实例。您可以只使用moment()

    根据您的编辑,我认为您可以这样做:

    var date_time = req.body.date + 'T' + req.body.time + 'Z';
    var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');
    

    或者,如果希望确保字段的格式正确:

    var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD  HH:mm:ss");
    var isvalid = m.isValid();
    var isafter = m.isAfter('2014-03-24T01:14:00Z');
    

  •  类似资料:
    • 问题内容: 我正在使用moment.js格式化我的日期时间,这里有两个日期值,当一个日期大于另一个日期时,我想实现一种特定的功能。我阅读了他们的大多数文档,但没有找到实现此目的的功能。我知道会在那里。 这是我的代码: 编辑 在这里,我正在比较两个日期,即,期望第一个日期大于第二个日期,但是它总是转到else条件。不知道为什么 问题答案: 我相信你正在寻找的查询功能,,,和。 但是要确切地说出您要尝

    • 我正在使用React-Datepicker和MomentJS。但是当我想使用Moment设置starDate时,该值在datepickerfield中给出无效日期。 当我在控制台中记录this.state.start日期时,控制台会显示以下内容:“开始日期: 27-11-2018”,格式为“DD-MM-YYYY”。此格式也用于DatePicker组件。 有人能解释一下为什么它在浏览器中显示无效日期

    • 问题内容: 如何在Java中比较没有时间的日期? 此代码比较时间和日期! 问题答案: 尝试比较将时间更改为00:00:00的日期(使用此功能):

    • 我有个约会‘2019-05-08t 22:15:00-0400’。我想将这个日期与当前的日期和时间进行比较。如果上述日期和时间小于当前日期和时间,那么我必须做些什么。 我的代码是:- 但它返回 false 。

    • 问题内容: 这是我正在尝试执行的一些代码片段: 我似乎无法比较日期和日期时间值。比较这些的最佳方法是什么?我应该将日期时间转换为日期还是相反?我如何在它们之间转换。 (一个小问题,但似乎有点令人困惑。) 问题答案: 使用该方法将日期时间转换为日期: 或者,您可以使用代替。你可以用 消除之后的时间部分。

    • 问题内容: 在Go中进行日期比较是否有任何选择?我必须根据日期和时间- 独立地对数据进行排序。因此,我可以允许一个对象在一定日期范围内发生,只要它也在一定时间范围内出现即可。在此模型中,我不能简单地选择最旧的日期,最年轻的时间/最新的日期,最新的时间和Unix()秒来比较它们。我真的很感谢任何建议。 最终,我编写了一个时间解析字符串比较模块,以检查时间是否在范围内。然而,这并不顺利。我有一些大问题