L'ajout d'heures de JavaScript objet Date?
Ce qui m'étonne, c'est que JavaScript de l'objet Date, ne pas mettre en œuvre une fonction d'ajout d'aucune sorte.
Je veux simplement une fonction qui permet de faire cela:
var now = Date.now();
var fourHoursLater = now.addHours(4);
function Date.prototype.addHours(h) {
//how do I implement this?
}
Je voudrais simplement quelques conseils dans une direction.
-
Dois-je faire le traitement de chaîne?
-
Puis-je utiliser setTime?
-
Comment sur millisecondes?
Comme ceci:
new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?
Cela semble vraiment hackish si - et il le fait même de travailler?
Vous devez vous connecter pour publier un commentaire.
JavaScript lui-même a terrible de la Date/Heure de l'API. Néanmoins, vous pouvez le faire en JavaScript:
Test:
var date = new Date(2012, 10, 22, 23, 0, 1); date.toString(); // Thu Nov 22 2012 23:00:01 GMT+0100 (CET) date.setHours(date.getHours() + 1); date.toString(); // Fri Nov 23 2012 00:00:01 GMT+0100 (CET)
Il fonctionne aussi très bien avec setMinutes()d=new Date('Sun Oct 27 2019 01:59:00 GMT+0100 (British Summer Time)')
et ned.setHours(d.getHours() + 1)
, puisd
devient Sun 27 Oct 2019 02:59:00 GMT+0000 (gmt, Greenwich Mean Time), qui est en fait 2 heures plus tard, pas 1 heure.Le code ci-dessous est d'ajouter les 4 heures de la date(par exemple la date d'aujourd'hui)
Il ne provoque pas d'erreur si vous essayez d'ajouter 4 à 23 (voir la docs):
setTime
ousetUTCHour
.Il est probablement mieux de faire le addHours méthode immuable, en retournant une copie de l'objet Date, plutôt que de la mutation de son paramètre.
De cette façon, vous pouvez enchaîner un tas d'appels de méthode sans se soucier de l'état.
add*
est couramment utilisé à la mutation de l'objet lui-même.add
est utilisé dans le .NET frameworkDateTime
classe beaucoup, et a le même sens que la+
(plus) en Mathématiques.currentDate.addHours(1)
<- à Partir de ma programmation instinct, je m'attends à descurrentDate
la valeur à modifier, mais de la mise en œuvre, il ne serait pas. Pourquoi je suggère de renommer ou de changer sa signature à quelque chosevar futureDate = currentDate.addHours(1)
, de cette façon, vous avez accès à la valeur d'origine decurrentDate
et vous avez une nouvelle variable pour la nouvelle date. C'est un moderne, motif, partie de la récente programmation fonctionnelle et tendance.add
La version proposée par kennebec échoue lors de la modification ou de l'heure d'été, puisque c'est le chiffre de l'heure définie.
va ajouter
h
heures àthis
indépendante du temps système de particularités.Jason Harwig méthode fonctionne aussi bien.
Vous pouvez utiliser le momentjs http://momentjs.com/ Bibliothèque.
Je pense aussi que l'objet d'origine ne doivent pas être modifiés. Donc, pour économiser de main-d'œuvre future, voici une solution combinée basée sur Jason Harwig de l' et Tahir Hasan réponses:
Il est un complément à la Datejs bibliothèque.
Et voici le JavaScript méthodes de date. kennebec sagement mentionnés getHours() et setHours();
De vérifier si sa n'est pas déjà défini, sinon définit la Date de prototype:
Une autre façon de gérer cela est de convertir la date à unixtime (de l'époque), puis ajouter l'équivalent en (milli)secondes, puis de le convertir en arrière. De cette façon, vous pouvez gérer le jour et le mois de transitions, comme l'ajout de 4 heures à 21, ce qui devrait se traduire dans la journée, à 01:00.
Pour un simple ajouter/soustraire des heures/minutes fonction en javascript, essayez ceci:
Ce peut être utilisée sans paramètres pour obtenir l'heure actuelle
ou avec les paramètres pour obtenir le temps avec l'ajout de quelques minutes/heures
même temps négatif fonctionne
cette fonction retourne un tableau de
SPRBRN est correct. Afin de tenir compte au début/à la fin du mois et de l'année, vous avez besoin de les convertir à l'Époque et à l'arrière.
Voici comment faire:
ou de le faire en une ligne (d'où les noms de variables sont les mêmes que ci-dessus:
Un peu bordélique, mais ça fonctionne!
Donné un format de date comme ceci: 2019-04-03T15:58
Votre sortie serait: 2019-04-03T16:58