yyyy tolocaledatestring toisostring online javascript datetime timezoneoffset

tolocaledatestring - javascript toISOString() ignora el desplazamiento de la zona horaria



javascript date format yyyy-mm-dd (4)

Esta función de fecha a continuación logra el efecto deseado sin una biblioteca de scripts adicional. Básicamente, se trata de una simple concatenación de componentes de fecha en el formato correcto y de un aumento del prototipo del objeto Fecha.

Date.prototype.dateToISO8601String = function() { var padDigits = function padDigits(number, digits) { return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number; } var offsetMinutes = this.getTimezoneOffset(); var offsetHours = offsetMinutes / 60; var offset= "Z"; if (offsetHours < 0) offset = "-" + padDigits(offsetHours.replace("-","") + "00",4); else if (offsetHours > 0) offset = "+" + padDigits(offsetHours + "00", 4); return this.getFullYear() + "-" + padDigits((this.getUTCMonth()+1),2) + "-" + padDigits(this.getUTCDate(),2) + "T" + padDigits(this.getUTCHours(),2) + ":" + padDigits(this.getUTCMinutes(),2) + ":" + padDigits(this.getUTCSeconds(),2) + "." + padDigits(this.getUTCMilliseconds(),2) + offset; } Date.dateFromISO8601 = function(isoDateString) { var parts = isoDateString.match(//d+/g); var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]); var isoDate = new Date(isoTime); return isoDate; } function test() { var dIn = new Date(); var isoDateString = dIn.dateToISO8601String(); var dOut = Date.dateFromISO8601(isoDateString); var dInStr = dIn.toUTCString(); var dOutStr = dOut.toUTCString(); console.log("Dates are equal: " + (dInStr == dOutStr)); }

Uso:

var d = new Date(); console.log(d.dateToISO8601String());

Espero que esto ayude a alguien más.

EDITAR

Se corrigió el problema UTC mencionado en los comentarios y se le dateFromISO8601 crédito a Alex por la función dateFromISO8601 .

Estoy intentando convertir Twitter datetime en una cadena local (para prettyDate) ahora durante 2 días. No estoy obteniendo la hora local correcta ...

estoy usando la siguiente función:

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", ""); }

en newdate todo está bien, pero toISOString () lo devuelve a la hora original otra vez ... ¿Alguien me puede ayudar a obtener la hora local en iso desde la fecha de Twitter formateada como: jue, 31 de mayo de 2012 08:33:41 +0000


Mi solución sin usar el momento es convertirla en una marca de tiempo, agregar el desfase de la zona horaria, luego convertir de nuevo a un objeto de fecha, y luego ejecutar toISOString ()

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


moment.js FTW !!!

Simplemente convierta su fecha en un momento y manipúlela como desee:

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/


moment.js es genial, pero a veces no desea obtener una gran cantidad de dependencias para cosas simples.

Lo siguiente también funciona:

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

El sector slice(0, -1) se deshace del Z final que representa la zona horaria Zulu y puede ser reemplazado por el suyo.