datetime - javascript toISOString() ignorerar tidszonsavvikelsen


Jag har försökt konvertera Twitters datum och tid till en lokal ISO-sträng (för prettyDate) nu i 2 dagar. Jag får bara inte lokal tid rätt..

jag använder följande funktion:

function getLocalISOTime(twDate) {
    var d = new Date(twDate);
    var utcd = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(),
        d.getMinutes(), d.getSeconds(), d.getMilliseconds());

    // obtain local UTC offset and convert to msec
    localOffset = d.getTimezoneOffset() * 60000;
    var newdate = new Date(utcd + localOffset);
    return newdate.toISOString().replace(".000", "");
}

i newdate är allt okej men toISOString() kastar tillbaka det till den ursprungliga tiden igen... Kan någon hjälpa mig att få lokal tid i iso från Twitterdate formaterad som: Thu, 31 May 2012 08:33:41 +0000

Svar #1

moment.js är bra men ibland vill du inte dra in ett stort antal beroenden för enkla saker.

Följande fungerar också:

    var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
    
    console.log(localISOTime)  // => '2015-01-26T06:40:36.181'

Metoden slice(0, -1) tar bort det avslutande Z som representerar Zulu-tidszon och kan ersättas med din egen.

Svar #2

Min lösning utan att använda moment är att konvertera det till en tidsstämpel, lägga till tidszonförskjutningen, sedan konvertera tillbaka till ett datumobjekt, och sedan köra toISOString()

var date = new Date(); // Or the date you'd like converted.
var isoDateTime = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();

Svar #3

moment.js FTW!!!

Bara konvertera ditt datum till ett ögonblick och manipulera det hur du vill:

var d = new Date(twDate);
var m = moment(d).format();
console.log(m);
// example output:
// 2016-01-08T00:00:00-06:00

http://momentjs.com/docs/

Svar #4

Med moment.js kan du använda keepOffset-parametern i toISOString:

toISOString(keepOffset?: boolean): string;
moment().toISOString(true)

Relaterade artiklar