J'utilise moment.js pour formater ma date et l'heure. Ici, j'ai deux valeurs de date et je souhaite obtenir une fonction particulière lorsqu'une date est supérieure à l'autre. J'ai lu la plupart de leurs documents, mais je n'ai pas trouvé la fonction pour y parvenir. Je sais que ce sera là.
Ceci est mon code:
var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date
var now = new Date(),
dnow = moment(now).tz('UTC'),
snow = dnow.minute() % 15,
diffnow = 15 - snow,
tonow = moment(dnow).add('minute', diffnow),
ahead30now = moment(tonow).add('minute', 30);
if (d > ahead30now) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {
}
Éditer
var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
console.log('is after true');
} else {
console.log('is after is false');
}
Ici, je compare deux dates, c'est-à-dire 2014-03-24T01:15:000 > 2014-03-24T01:14:000
, en m'attendant à ce que la première soit plus grande que la seconde, mais elle passe toujours à la condition else. Je ne sais pas pourquoi?
Je crois que vous recherchez les fonctions de requête , isBefore
, isSame
et isAfter
.
Mais il est un peu difficile de dire exactement ce que vous essayez. Peut-être cherchez-vous simplement à faire la différence entre l'heure d'entrée et l'heure actuelle? Si tel est le cas, considérons le fonction de différence , diff
. Par exemple:
moment().diff(date_time, 'minutes')
Quelques autres choses:
Il y a une erreur dans la première ligne:
var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
Cela ne va pas au travail. Je pense que tu voulais dire:
var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';
Bien sûr, vous pourriez aussi bien:
var date_time = '2013-03-24T10:15:20:12Z';
Vous utilisez: .tz('UTC')
de manière incorrecte. .tz
appartient à moment-fuseau horaire . Vous n'avez pas besoin de l'utiliser sauf si vous travaillez avec d'autres fuseaux horaires, comme America/Los_Angeles
.
Si vous souhaitez analyser une valeur au format UTC, utilisez:
moment.utc(theStringToParse)
Ou, si vous souhaitez analyser une valeur locale et la convertir en UTC, utilisez:
moment(theStringToParse).utc()
Ou peut-être n'en avez-vous pas besoin du tout. Le fait que la valeur d’entrée soit en UTC ne signifie pas que vous devez travailler en UTC dans l’ensemble de votre fonction.
Vous semblez obtenir le "maintenant" instance par moment(new Date())
. Vous pouvez simplement utiliser moment()
.
Sur la base de votre modification, je pense que vous pouvez simplement faire ceci:
var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');
Ou, si vous souhaitez vous assurer que vos champs sont validés pour être au format correct:
var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');
Vous devriez pouvoir les comparer directement.
var date = moment("2013-03-24")
var now = moment();
if (now > date) {
// date is past
} else {
// date is future
}
$(document).ready(function() {
$('.compare').click(function(e) {
var date = $('#date').val();
var now = moment();
var then = moment(date);
if (now > then) {
$('.result').text('Date is past');
} else {
$('.result').text('Date is future');
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input type="text" name="date" id="date" value="2014-12-18" placeholder="yyyy-mm-dd">
<button class="compare">Compare date to current date</button>
<br>
<div class="result"></div>
Jsfiddle: http://jsfiddle.net/guhokemk/1/
function compare(dateTimeA, dateTimeB) {
var momentA = moment(dateTimeA,"DD/MM/YYYY");
var momentB = moment(dateTimeB,"DD/MM/YYYY");
if (momentA > momentB) return 1;
else if (momentA < momentB) return -1;
else return 0;
}
alert(compare("11/07/2015", "10/07/2015"));
La méthode renvoie 1 si dateTimeA est supérieure à dateTimeB.
La méthode retourne 0 si dateTimeA est égal à dateTimeB
La méthode renvoie -1 si dateTimeA est inférieure à dateTimeB.
Il est important que votre date-heure soit au bon format ISO lorsque vous utilisez l'un des éléments momentjs requêtes : isBefore
, isAfter
, isSameOrBefore
, isSameOrAfter
, isBetween
Ainsi, au lieu de 2014-03-24T01: 14: 000, votre date/heure doit être soit:
2014-03-24T01: 14: 00 ou 2014-03-24T01: 14: 00.000Z
sinon, vous risquez de recevoir l'avertissement de dépréciation suivant et la condition sera évaluée à false:
Avertissement de déprécation: la valeur fournie n’est pas au format reconnu RFC2822 ou ISO. La construction de moment revient à js Date (), qui n'est pas fiable sur tous les navigateurs et toutes les versions. Les formats de date non RFC2822/ISO sont déconseillés et seront supprimés dans une prochaine version majeure. Veuillez vous référer à http://momentjs.com/guides/#/warnings/js-date/ pour plus d'informations.
// https://momentjs.com/docs/#/query/
const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));
const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));
const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));
console.log(`Date is After: ${dateIsAfter}`);
console.log(`Date is Same: ${dateIsSame}`);
console.log(`Date is Before: ${dateIsBefore}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>
passez la date à un moment comme celui-ci, il comparera et donnera un résultat. si vous ne voulez pas le format, supprimez-le
moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")
Je dois le faire dans mon cas, lorsque l'utilisateur ouvre une offre à partir de l'historique des transactions si la date de début de l'offre est inférieure à la date du jour. J'avais besoin d'afficher la date du jour comme date de début.
var startDate = "20/05/2018";
var date1 = moment().format("YYYY-MM-DD");
var date2 = moment(startDate).format("YYYY-MM-DD");
// and i checked with if statement
if(date1 > date2){ // if startDate is less than today
startDate = date1;
}else{ // if startDate is greater than today
}
REMARQUE: pour moi, il fallait convertir les deux dates au même format et utiliser "AAAA-MM-JJ".
moment(d).isAfter(ahead30now); // true
http://momentjs.com/docs/#/query/is-after/
if (moment(d).isAfter(ahead30now)) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {
}
var startDate = moment(startDateVal, "DD.MM.YYYY");//Date format
var endDate = moment(endDateVal, "DD.MM.YYYY");
var isAfter = moment(startDate).isAfter(endDate);
if (isAfter) {
window.showErrorMessage("Error Message");
$(elements.endDate).focus();
return false;
}