una sumar obtener meses horas hora formato fechas fecha comparar actual javascript datetime prototype-programming

sumar - obtener fecha y hora actual javascript



¿Agregando horas al objeto de fecha de Javascript? (12)

Me sorprende que el objeto Date de Javascript no implemente una función de adición de ningún tipo.

Simplemente quiero una función que pueda hacer esto:

var now = Date.now(); var fourHoursLater = now.addHours(4); function Date.prototype.addHours(h) { // how do I implement this? }

Simplemente me gustaría algunos punteros en una dirección.

  • ¿Necesito hacer un análisis de cadena?

  • ¿Puedo usar setTime?

  • ¿Qué tal milisegundos?

Me gusta esto:

new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?

Sin embargo, esto parece realmente hacker, ¿e incluso funciona?


Compruebe si no está definido, de lo contrario, lo define en el prototipo Fecha:

if (!Date.prototype.addHours) { Date.prototype.addHours = function(h) { this.setHours(this.getHours() + h); return this; }; }


El código a continuación es agregar 4 horas a la fecha (ejemplo de la fecha de hoy)

var today = new Date(); today.setHours(today.getHours() + 4);

No provocará errores si intenta agregar de 4 a 23 (consulte la docs ):

Si un parámetro que usted especifica está fuera del rango esperado, setHours () intenta actualizar la información de fecha en el objeto Date en consecuencia



JavaScript en sí tiene terribles API de fecha / hora. Esta es la única manera de hacerlo en JavaScript puro. Sin Datejs , recomiendo usar Datejs , como sugiere Nosredna, si estás haciendo mucha manipulación de citas.

Date.prototype.addHours = function(h) { this.setTime(this.getTime() + (h*60*60*1000)); return this; }


La versión sugerida por kennebec fallará cuando se cambie ao desde DST, ya que es el número de hora que se establece.

this.setUTCHours(this.getUTCHours()+h);

Agregará h horas a this independiente de las peculiaridades del sistema de tiempo. El método de Jason Harwig también funciona.


Otra forma de manejar esto es convertir la fecha a unixtime (época), luego agregar el equivalente en (mili) segundos y luego convertirla de nuevo. De esta manera puede manejar las transiciones del día y del mes, como agregar 4 horas a 21, lo que debería resultar en el día siguiente, 01:00.


Para una función simple de agregar / restar hora / minuto en javascript, intente esto:

function getTime (addHour, addMin){ addHour = (addHour?addHour:0); addMin = (addMin?addMin:0); var time = new Date(new Date().getTime()); var AM = true; var ndble = 0; var hours, newHour, overHour, newMin, overMin; //change form 24 to 12 hour clock if(time.getHours() >= 13){ hours = time.getHours() - 12; AM = (hours>=12?true:false); }else{ hours = time.getHours(); AM = (hours>=12?false:true); } //get the current minutes var minutes = time.getMinutes(); // set minute if((minutes+addMin) >= 60 || (minutes+addMin)<0){ overMin = (minutes+addMin)%60; overHour = Math.floor((minutes+addMin-Math.abs(overMin))/60); if(overMin<0){ overMin = overMin+60; overHour = overHour-Math.floor(overMin/60); } newMin = String((overMin<10?''0'':'''')+overMin); addHour = addHour+overHour; }else{ newMin = minutes+addMin; newMin = String((newMin<10?''0'':'''')+newMin); } //set hour if(( hours+addHour>=13 )||( hours+addHour<=0 )){ overHour = (hours+addHour)%12; ndble = Math.floor(Math.abs((hours+addHour)/12)); if(overHour<=0){ newHour = overHour+12; if(overHour == 0){ ndble++; } }else{ if(overHour ==0 ){ newHour = 12; ndble++; }else{ ndble++; newHour = overHour; } } newHour = (newHour<10?''0'':'''')+String(newHour); AM = ((ndble+1)%2===0)?AM:!AM; }else{ AM = (hours+addHour==12?!AM:AM); newHour = String((Number(hours)+addHour<10?''0'':'''')+(hours+addHour)); } var am = (AM)?''AM'':''PM''; return new Array(newHour, newMin, am); };

Esto se puede utilizar sin parámetros para obtener la hora actual

getTime();

o con parámetros para obtener el tiempo con los minutos / horas añadidos

getTime(1,30); // adds 1.5 hours to current time getTime(2); // adds 2 hours to current time getTime(0,120); // same as above

incluso el tiempo negativo funciona

getTime(-1, -30); // subtracts 1.5 hours from current time

esta función devuelve una matriz de

array([Hour], [Minute], [Meridian])


Probablemente sea mejor hacer que el método addHours sea inmutable devolviendo una copia del objeto Date en lugar de mutar su parámetro.

Date.prototype.addHours= function(h){ var copiedDate = new Date(this.getTime()); copiedDate.setHours(copiedDate.getHours()+h); return copiedDate; }

De esta manera puede encadenar un montón de llamadas a métodos sin preocuparse por el estado.


Puede utilizar la biblioteca momentms http://momentjs.com/ .

var moment = require(''moment''); foo = new moment(something).add(10, ''m'').toDate();


SPRBRN es correcto. Para tener en cuenta el inicio / fin de mes y año, debe convertir a Epoch y viceversa.

Así es como haces eso:

var milliseconds = 0; //amount of time from current date/time var sec = 0; //(+): future var min = 0; //(-): past var hours = 2; var days = 0; var startDate = new Date(); //start date in local time (we''ll use current time as an example) var time = startDate.getTime(); //convert to milliseconds since epoch //add time difference var newTime = time + milliseconds + (1000*sec) + (1000*60*min) + (1000*60*60*hrs) + (1000*60*60*24) var newDate = new Date(newTime);//convert back to date; in this example: 2 hours from right now


o hazlo en una línea (donde los nombres de las variables son los mismos que los anteriores)

var newDate = new Date(startDate.getTime() + millisecond + 1000 * (sec + 60 * (min + 60 * (hours + 24 * days))));


También creo que el objeto original no debe ser modificado. Así que para ahorrar mano de obra futura, aquí hay una solución combinada basada en las respuestas de Jason Harwig y Tahir Hasan :

Date.prototype.addHours= function(h){ var copiedDate = new Date(); copiedDate.setTime(this.getTime() + (h*60*60*1000)); return copiedDate; }


Date.prototype.addHours= function(h){ this.setHours(this.getHours()+h); return this; }

Prueba:

alert(new Date().addHours(4));