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)