Moment.js返回“1969年12月31日”

时间:2016-07-28 23:38:47

标签: javascript node.js api momentjs

基本上我正在重建FCC的后端项目之一:https://timestamp-ms.herokuapp.com/

如果我键入以下内容,它看起来像我当前的代码: http://localhost:3000/1

它返回如下:

{"unix":"1","natural":"December 31, 1969"} 

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{
    output = moment(dataString, "MMMM D, YYYY")
  }

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

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

我原本预计会在1970年1月1日返回,但我不确定错误来自哪里。

2 个答案:

答案 0 :(得分:2)

GMT时区将是“1970年1月1日”。片刻最有可能在您自己的时区中格式化日期,如果您是格林尼治标准时间的西部,则该日期将变为“1969年12月31日”。

要格式化UTC时区中的日期,您可以写:

moment('1', 'X').utc().format('MMMM D, YYYY')

这将输出“1970年1月1日”。

答案 1 :(得分:1)

它是1970年1月1日UTC,但是如果你所处的时区与UTC的负偏移(例如所有北美和南美),那么moment.js可以报告1969年12月31日几个小时前的时间早于午夜,因此提前一天。

要获得一个假定UTC的时刻对象而不是运行它的机器的时区,您可以使用moment.utc()

var output = moment.utc('1', 'X');
console.log(output.format('MMMM D, YYYY')); // 'January 1, 1970'