Me gustaría obtener un objeto Date que sea 30 minutos más tarde que otro objeto Date. ¿Cómo lo hago con JavaScript?
javascript
date
date-manipulation
Morgan Cheng
fuente
fuente
date.setMinutes(date.getMinutes() + ...)
fallarán al cruzar los límites del horario de verano. Por ejemplo (suponiendo que '2014-03-09' es un límite de horario de verano):var d = new Date('2014-03-09 01:59:00'), f = new Date(d.getTime()); d.setMinutes(d.getMinutes() + 30);
d
ahora es 30 minutos antes, no más tarde quef
.f
yd
verá que uno dice "GMT-0500" y el otro dice "GMT-0400" (o cualquiera que sea su zona horaria). Además, si llama.getTime()
a ambosf
yd
verá quef
es más grande qued
(es decir, más tarde).01:89
se convertiría en algo02:29
que no existe el día en que "avanzas". Chrome decide que debería ser01:29
, FF decide03:29
. En la noche en la que "retrocede", ambos navegadores omiten la hora de "retroceso" y saltan 90 minutos hacia adelante02:29
. Aquí hay algunas demostraciones de JSFiddle: "spring forward" / "fall back"Respuestas:
Usando una biblioteca
Si está haciendo mucho trabajo de fechas, es posible que desee buscar en bibliotecas de fechas de JavaScript como Datejs o Moment.js . Por ejemplo, con Moment.js, esto es simplemente:
Javascript vainilla
Esto es como la respuesta del caos , pero en una línea:
¿Dónde
diff
está la diferencia en minutos que quieres deloldDateObj
tiempo? Incluso puede ser negativo.O como una función reutilizable, si necesita hacer esto en varios lugares:
Y en caso de que esto no sea obvio, la razón por la que multiplicamos los minutos
60000
es para convertir los minutos a milisegundos.Tenga cuidado con Javascript de vainilla. ¡Las fechas son difíciles!
Puede pensar que puede agregar 24 horas a una fecha para obtener la fecha de mañana, ¿verdad? ¡Incorrecto!
Resulta que si el usuario observa el horario de verano, un día no necesariamente dura 24 horas. Hay un día al año que dura solo 23 horas y un día al año que dura 25 horas. Por ejemplo, en la mayoría de los Estados Unidos y Canadá, 24 horas después de la medianoche, el 2 de noviembre de 2014, todavía es el 2 de noviembre:
Es por eso que usar una de las bibliotecas mencionadas anteriormente es una apuesta más segura si tiene que trabajar mucho con esto.
A continuación hay una versión más genérica de esta función que escribí. Todavía recomiendo usar una biblioteca, pero eso puede ser excesivo / imposible para su proyecto. La sintaxis se basa en la función MySQL DATE_ADD .
Trabajando jsFiddle demo .
fuente
fuente
Date
objetos.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
fuente
setTime
devuelve una marca de tiempo numérica de milisegundos, no un objeto de fecha. (No piense que puede hacer una frase).var in30Mins = new Date(+new Date() + 1.8e6)
es de una sola línea, pero no estoy seguro de que sea mejor que una de dos líneas. ;-)fuente
setMinutes
devuelve la marca de tiempo, peronow
sigue siendo elDate
objeto, por lo quenow = new Date(now)
es obsoletoTal vez algo como esto?
fuente
Date
objetos.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
If a parameter you specify is outside of the expected range, setMinutes() attempts to update the date information in the Date object accordingly.
Siempre creo 7 funciones, para trabajar con fecha en JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.
Puedes ver un ejemplo aquí: http://jsfiddle.net/tiagoajacobi/YHA8x/
Cómo utilizar:
Estas son las funciones:
fuente
date.addHours(3, 30)
agregar 3 horas y 30 minutos. addYears tomaría años, meses y días, addMonths tomaría meses y días, addMinutes tomaría minutos, segundos, milisegundos, etc.new Date().addHours(4).addMinutes(45);
Puedes llamar tantos como quieras, porque los métodos devuelven "this", que es el objeto de fecha actual.var dt = new Date();
entoncesdt.addMinutes(45); dt.addHours(4);
o inclusodt.addMinutes(285);
odt.addMinutes(45).addHours(4);
todo funcionará. Si tiene una pregunta con algún ejemplo de código, para su problema publíquelo aquí, con gusto lo ayudaréLa forma más fácil de resolver es reconocer que en javascript las fechas son solo números. Comienza
0
o'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Cada1
representa un milisegundo. Puede sumar o restar milisegundos obteniendo el valor e instanciando una nueva fecha usando ese valor. Puedes manejarlo con bastante facilidad con esa mente.fuente
Esto es lo que hago, que parece funcionar bastante bien:
Entonces puedes llamar a esto así:
fuente
return new Date(this.getTime() + minutes * 60000);
, yo, la fecha provisional copiada no es necesaria. ;-)Aquí está la versión ES6 :
Llámalo como:
fuente
Siento que muchas de las respuestas aquí carecen de un componente creativo, muy necesario para los cálculos de viajes en el tiempo. Presento mi solución para una traducción temporal de 30 minutos.
(jsfiddle aquí )
fuente
Para los perezosos como yo:
La respuesta de Kip (desde arriba) en coffeescript, usando una "enumeración", y operando en el mismo objeto:
fuente
Use una biblioteca existente conocida para manejar las peculiaridades involucradas en el manejo de los cálculos de tiempo. Mi favorito actual es moment.js .
fuente
Solo otra opción, que escribí:
Biblioteca DP_DateExtensions
Es excesivo si este es todo el procesamiento de fechas que necesita, pero hará lo que quiera.
Admite el formato de fecha / hora, matemática de fecha (partes de fecha de suma / resta), comparación de fecha, análisis de fecha, etc. Es de código abierto.
fuente
Podrías hacer esto:
fuente
Aquí está mi frase:
fuente
Debe obtener el valor de la fecha actual para obtener la fecha con (ms) y agregarle (30 * 60 * 1000). Ahora tienes (fecha actual + 30 min) con ms
fuente
Sé que el tema es demasiado viejo. Pero estoy bastante seguro de que hay algunos desarrolladores que aún necesitan esto, así que hice este simple script para ti. ¡Espero que lo disfruten!
fuente