2016-07-28 9 views
0

Im Wesentlichen eines FCC-Backend-Projekt Ich bin neu zu erstellen: https://timestamp-ms.herokuapp.com/Moment.js Rückkehr „31. Dezember 1969“

Es sieht aus wie mit meinem aktuellen Code, wenn ich folgendes eingeben: http://localhost:3000/1

Zurückgegeben so wie:

{"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) 
 
})

Ich hätte Rückkehr 1. Januar 1970 erwartet, aber ich bin nicht sicher, wo der Fehler herkommt.

Antwort

2

Es wäre "1. Januar 1970" in der GMT-Zeitzone. Moments formatiert das Datum höchstwahrscheinlich das Datum in Ihrer eigenen Zeitzone, die dann "31. Dezember 1969" wird, wenn Sie sich westlich von GMT befinden.

Um das Datum in der UTC-Zeitzone zu formatieren Sie schreiben können:

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

Dies wird Ausgang "1. Januar 1970".

+0

Aus den Moment.js Docs:

Um einen Moment Objekt zu erhalten, die UTC statt der Zeitzone der Maschine übernehmen wird, auf dem es läuft, können Sie moment.utc() verwenden http://momentjs.com/docs/#/parsing/utc/ "Standardmäßig wird Moment in lokaler Zeit analysiert und angezeigt." – wuworkshop

1

Es ist 1. Januar 1970 UTC, aber wenn Sie in einer anderen Zeitzone sind, die einen negativen Offset von UTC hat (wie ganz Nordamerika und Südamerika), dann kann moment.js den 31. Dezember 1969 melden Stunden früher macht die Zeit früher als Mitternacht und somit einen Tag früher.

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