如何比较Parse Cloud中的2个Date字段?

时间:2014-07-08 11:07:49

标签: parse-platform

在如下的云功能中,我在比较日期方面遇到了问题:

Parse.Cloud.define(“myCloudFunction”, function(request, response)
  {
    var query = new Parse.Query(“MyClass”);
    query.find
    ({
      success: function(resultList) {
        var today = new Date();

        for (var i = 0; i < resultList.length; ++i) {
          if (resultList[i].get(“dateFieldOne”)>resultList[i].get(“dateFieldTwo”)) {
            // Do something!!
          } else {
            // Do some other thing!!
            if (resultList[i].get(“dateFieldOne”)>today) doOneMoreThing();
          }
        }

        response.success(resultList);
      },
      error: function() {
        response.error("Things have gone wrong.”);
      }
    });
  });

行:

if (resultList[i].get(“dateFieldOne”)>resultList[i].get(“dateFieldTwo”))
if (resultList[i].get(“dateFieldOne”)>today) doOneMoreThing();

无效。

我应该在这个上下文中使用什么语法来比较dateFieldOne和DateFieldTwo两个字段的类型Date?

2 个答案:

答案 0 :(得分:4)

Moment library是你的朋友:

var moment = require('moment');
Parse.Cloud.define("myCloudFunction", function(request, response) {
  var query = new Parse.Query(“MyClass”);
  query.find
  ({
    success: function(resultList) {
      var today = new moment();

    for (var i = 0; i < resultList.length; ++i) {
      var dateFieldOne = moment(resultList[i].get("datefieldOne"));
      var dateFieldTwo = moment(resultList[i].get("dateFieldTwo"));
      if (dateFieldOne.isAfter(dateFieldTwo)) {
        // Do something!!
      } else {
        // Do some other thing!!
        if (dateFieldOne.isAfter(today)) doOneMoreThing();
      }
    }
    // ...etc...

使用Moment,您还可以查询所需的粒度级别,例如:

var today = moment();
var tomorrow = moment().add(1, 'days');
// assuming today is 3pm on 2014-07-09
moment("2014-07-09T20:00:00").isBefore(today); // false (8pm is not before 3pm)
moment("2014-07-09T10:00:00").isBefore(today); // true (10am is before 3pm)
moment("2014-07-09T10:00:00").isBefore(today, 'day'); // false (ignoring time, they are equal)
moment("2014-07-09T10:00:00").isBefore(tomorrow, 'day'); // true
moment("2014-07-09T20:00:00").isBefore(tomorrow, 'day'); // true

更新:请注意,isBefore()isAfter()仅在版本2.0之后可用且Parse.com使用1.7。如果您想要访问这些方法,可以下载moment.js并将其放在/cloud目录中。

答案 1 :(得分:1)

对于此代码

for (var i = 0; i < resultList.length; ++i) {
          if (resultList[i].get(“dateFieldOne”)>resultList[i].get(“dateFieldTwo”)) {
            // Do something!!
          } else {
            // Do some other thing!!
            if (resultList[i].get(“dateFieldOne”)>today) doOneMoreThing();
          }
        }

首先将其转换为unix时间戳,然后直接比较它们。

  for (var i = 0; i < resultList.length; ++i) {
              if (new Date(resultList[i].get(“dateFieldOne”)).getTime()>new Date(resultList[i].get(“dateFieldTwo”)).getTime()) {
                // Do something!!
              } else {
                // Do some other thing!!
                if (new Date(resultList[i].get(“dateFieldOne”)).getTime()>today) doOneMoreThing();
              }
            }