Moment.js没有返回正确的标准时间

时间:2016-07-30 17:14:33

标签: javascript momentjs

当我差不多完成FCC(https://www.freecodecamp.com/challenges/timestamp-microservice

的项目时

我无法弄清楚为什么当输入处于标准时间时,它将无法正确输出其Unix时间戳。

例如,当我输入:

http://localhost:3000/January%201%201970

它将如此输出:

{"unix":"28800","natural":"January 1, 1970"}

似乎有8小时的偏移(28800秒,但即使我应用utcOffset(),它也不会改变。

var express = require('express');
var path = require('path')
var app = express();
var moment = require('moment')
var port = 3000;
//homepage
app.get('/', function(req, res) {
  var fileName = path.join(__dirname, 'index.html');
  res.sendFile(fileName, function (err) {
    if (err) {console.error(err)}
    console.log('This is the homepage')
  });
});

//input of the page
app.get('/:dataString', function(req, res) {
  var dataString = req.params.dataString;
  var output;
  //Using regex, checks if the dataString has only number characters
  if(/^[0-9]*$/.test(dataString)){
    output = moment(dataString, "X")
  } else{
    console.log(dataString)
    output = moment(dataString, "MMMM DD YYYY")
    console.log(output.utc().format("X"))
  }

  if (output.isValid()){
    res.json({
      unix: output.utc().format("X"),
      natural: output.utc().format("MMMM D, YYYY")
    });
  } else{
    res.json({
      unix: 'null',
      natural: 'null'
    });
  }
})

app.listen(port,function(){
  console.log("turn on. Port is: ", port)
})

1 个答案:

答案 0 :(得分:1)

在您的代码中:

output = moment(dataString, "MMMM DD YYYY")

这是在当地时间创造一个时刻。生成的时间戳反映了您dataString时的当地时区与UTC的偏移量。

如果您希望输入基于UTC,那么它将是:

output = moment.utc(dataString, "MMMM DD YYYY")