web-dev-qa-db-fra.com

Ajout de minutes à datetime dans momentjs

Je dois ajouter la variable secondsToMinutes à la startdate

secondsToMinutes est "3:20" startDate = "2:00 PM" endDate devrait être égal à "2:03:20 PM" . J'ai essayé de nombreuses façons et obtenir des erreurs chaque temps.

   var startdate = data.StartTime;
   startdate = moment(startdate).format('LTS');

   var secondsToMinutes = readableDuration(self.runlength());//='3:20';

   var seconds = secondsToMinutes.split(':')[1];
   var minutes = secondsToMinutes.split(':')[0];

   var date = moment(startdate)
        .add(seconds, 'seconds')
        .add(minutes, 'minutes')
        .format('LTS');

La date apparaît comme une date invalide.

7
CsharpBeginner

moment().format("LTS") renvoie une valeur de chaîne au format hh:mm:ss AM/PM . Lorsque vous créez un objet moment à l'aide d'une chaîne qui n'est pas au format standard, vous devez passer le format d'entrée en tant que second paramètre au constructeur moment.

Par exemple: Jan 1, 2017 dans la chaîne 01012017 n'est pas une représentation standard. Mais si vous avez besoin d'un objet moment, utiliser moment("01012017") donnera une réponse "Date invalide" lors du formatage. Utilisez plutôt moment("01012017","DDMMYYYY")

var d = moment("01012017")
d.toISOString() => "Invalid date"

var d = moment("01012017", "DDMMYYYY")
d.toISOString() => "2016-12-31T18:30:00.000Z"

Dans votre code, lors de la création de la variable 'date', passez "hh: mm: ss A" comme second paramètre dans le constructeur du moment, comme indiqué ci-dessous.

   var date = moment(startdate, "hh:mm:ss A")
        .add(seconds, 'seconds')
        .add(minutes, 'minutes')
        .format('LTS');
8
Muralidharan

Moment a vraiment une bonne documentation. Je voudrais vérifier: http://momentjs.com/docs/

Mais pour répondre plus directement à votre question, vous pourriez faire quelque chose comme:

var secondsToMinutes = '3:20';
var seconds = secondsToMinutes.split(':')[1];
var minutes = secondsToMinutes.split(':')[0];

var momentInTime = moment(...)
                   .add(seconds,'seconds')
                   .add(minutes,'minutes')
                   .format('LT');

Vous devriez utiliser les manipulateurs réels au mieux de vos capacités. Vous pouvez faire des choses intéressantes avec les durées maintenant, mais ceci est plus succinct.

Modifier:

Comme mentionné dans une réponse différente:

 moment('2:00:00 PM', 'h:mm:ss A')

Est nécessaire si vous manipulez le format that. Peu importe - ajouter/soustraire des minutes/heures à un objet moment est trivial. Passer des chaînes non valides à un objet moment est un problème différent en soi. ;)

3
The Dembinski

Lors du dernier appel moment(), vous essayez d'analyser la valeur "14:00:00 PM". Selon la documentation, vous devez utiliser l'appel String + Format dans ce cas:

Pour obtenir des résultats cohérents lors de l'analyse d'éléments autres que les chaînes ISO 8601, vous devez utiliser String + Format.

Quand tu fais:

var date = moment('2:00:00 PM')
    .add(30, 'seconds')
    .add(2, 'minutes')
    .format('LTS');

La date sera un Invalid date. Mais si vous passez le format h:mm:ss A en tant que second paramètre:

var date = moment('2:00:00 PM', 'h:mm:ss A')
    .add(30, 'seconds')
    .add(2, 'minutes')
    .format('LTS');

... le résultat est 2:02:30 PM.

0
ischenkodv