2014-07-08 28 views
2

在云功能类似下面,我有比较日期的问题:如何比较Parse Cloud中的2个日期字段?

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两个字段?

回答

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... 

随着一刻,你也可以查询粒度您所需要的,如:

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 

UPDATE:注意isBefore()isAfter()只版本2.0和Parse.com正在使用1.7。如果您想访问这些方法,可以下载moment.js并将其放入您的/cloud目录中。

+1

这听起来很有趣,但我仍然必须弄清楚如何在解析中使用它。 即使我包括: var moment = require('moment'); 在我的代码中。我工作,我得到一个错误: 错误:类型错误:对象星期二2014年7月08日15:56:01 GMT + 0000(UTC)没有方法'isAfter' – Michel

+0

由于我从未使用云模块,我很可能会做有问题。 – Michel

+0

是这样的: var itemDate = moment(resultList [i] .get(“createdAt”)); 应该工作? – Michel

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(); 
       } 
      }