Moment.js 并在服务器端进行格式化

Moment.js and formatting on server side

需要知道:


var date = moment(new Date());
console.log(date.format("YYYY-MM-DD  HH:mm:ss.SS"));

我遇到了这个错误

SyncedCron: Exception "count daily parks per spot" ReferenceError: moment is not defined
    at spotIDList.forEach (app/server/main.js:66:18)
    at SynchronousCursor.forEach (packages/mongo/mongo_driver.js:1054:16)
    at Cursor.(anonymous function) [as forEach] (packages/mongo/mongo_driver.js:876:44)
    at Object.job (app/server/main.js:62:16)
    at packages/percolate_synced-cron.js:242:26
    at scheduleTimeout (packages/percolate_synced-cron.js:290:7)
    at packages/percolate_synced-cron.js:338:42
    at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1186:26)
    at packages/meteor.js:502:25
    at runWithEnvironment (packages/meteor.js:1238:24)

上面的代码片段来自以下代码

SyncedCron.add({
  name: 'Simple Cron Function',
  schedule: function(parser) {
    // parser is a later.parse object
    return parser.text('every 15 second');
  },
  job: function(intendedAt) {
    var spotList = spots.find({});

    spotList.forEach((spot) => {

      var devaddr = `${spot.devaddr}`;
      var date = moment(new Date());
      console.log(date.format("YYYY-MM-DD  HH:mm:ss.SS"));
      var dailyVisitsCount = log.find(
        {
          devaddr : devaddr,
          car : "1",
          createdAt: {
            $gte: date.format("YYYY-MM-DD  HH:mm:ss.SS")
          }
        },
        {
          sort: {
            createdAt:1
          }
        }
      ).count();

      spots.update({devaddr : devaddr}, { $set: {numberOfParksToday: dailyVisitsCount } } , {multi: false}, function(err, res) {
        if (err) throw err;
      });
      console.log("Daily Visits Count Updated to " + dailyVisitsCount);

    });

  }
});

如能深入了解此代码块为何未按应有的方式工作,我们将不胜感激。

我确实发现这个问题是由于以前版本的 meteor 中的一个错误引起的,该错误已被修复。

我只是想以我的数据库接受的格式获取今天的日期,并使用它来过滤我的结果。也欢迎其他建议。

PS:Momnet.js 在不同的位置为我工作(客户端代码)


编辑:

W20180312-08:03:15.324(-7)? (STDERR) app/server/main.js:1
W20180312-08:03:15.325(-7)? (STDERR) (function(Npm,Assets){(function(){import moment from 'moment'
W20180312-08:03:15.325(-7)? (STDERR)                                   ^^^^^^
W20180312-08:03:15.325(-7)? (STDERR) 
W20180312-08:03:15.325(-7)? (STDERR) SyntaxError: Unexpected reserved word
W20180312-08:03:15.326(-7)? (STDERR)     at Object.exports.runInThisContext (vm.js:53:16)
W20180312-08:03:15.327(-7)? (STDERR)     at /home/elder/Desktop/Recreation-of-ParkeyeDashboard/ParkeyeDashboard/.meteor/local/build/programs/server/boot.js:289:30
W20180312-08:03:15.327(-7)? (STDERR)     at Array.forEach (native)
W20180312-08:03:15.329(-7)? (STDERR)     at Function._.each._.forEach (/home/elder/.meteor/packages/meteor-tool/.1.4.2_3.14963jl++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20180312-08:03:15.330(-7)? (STDERR)     at /home/elder/Desktop/Recreation-of-ParkeyeDashboard/ParkeyeDashboard/.meteor/local/build/programs/server/boot.js:128:5
W20180312-08:03:15.330(-7)? (STDERR)     at /home/elder/Desktop/Recreation-of-ParkeyeDashboard/ParkeyeDashboard/.meteor/local/build/programs/server/boot.js:344:5
W20180312-08:03:15.330(-7)? (STDERR)     at Function.run (/home/elder/Desktop/Recreation-of-ParkeyeDashboard/ParkeyeDashboard/.meteor/local/build/programs/server/profile.js:480:12)
W20180312-08:03:15.331(-7)? (STDERR)     at /home/elder/Desktop/Recreation-of-ParkeyeDashboard/ParkeyeDashboard/.meteor/local/build/programs/server/boot.js:343:11

您需要安装 moment.js 软件包:

meteor npm i --save moment

然后在你的文件的顶部你需要导入时刻:

import moment from 'moment'

然后以数据库将接受的格式获取日期,只需执行以下操作:

var date = moment().toDate()

使用moment()创建当前date/time的矩对象。 运行 toDate() 在日期对象中给你相同的 date/time。