Dans un fichier php j'ai un div avec id et les données renvoyées, voir le code s'il vous plaît:

<div id="dom-target" style="display: none;" data-stuff="2017, 8, 20, 0, 0"></div>

Ok, maintenant j'ai besoin de passer la valeur de données dans le nouvel appel de date, (est un compte à rebours), j'essaye avec une variable, mais NaN est affiché, par exemple

var ar = $('#dom-target').data('stuff'); 

Enfin le code JS est:

if (jQuery().mbComingsoon) {
    var ar = $('#dom-target').data('stuff');
    jQuery('#myCounter').mbComingsoon({expiryDate: new Date(ar), speed: 500});
    setTimeout(function () {
        jQuery(window).resize();
    }, 200);
}

Apparemment, je ne peux pas utiliser new Date(ar) pour appeler des données depuis div?

Je vous remercie!

3
Carlos Roman 20 avril 2017 à 18:01

3 réponses

Meilleure réponse

Plutôt que d'essayer d'analyser '2017, 9, 20, 0, 0' dans votre javascript, pourquoi ne pas utiliser un format de date plus adapté dans votre html, comme ceci:

data-stuff="2019-08-20 00:00"

2
paul 20 avril 2017 à 15:18

new Date('2017, 8, 20, 0, 0') renvoie Invalid Date. C'est parce qu'il attend des arguments individuels au lieu d'une chaîne les contenant tous.

Puisque vous ne pouvez pas appeler apply directement sur un constructeur, cela nécessite un peu de magie:

var raw = '2017, 8, 20, 0, 0',
    parts = [null].concat(raw.split(',').map(function (item) {
        return parseInt(item.trim(), 10);
    })),
    _Date = Function.prototype.bind.apply(Date, parts);

console.log(parts, new _Date); // Wed Sep 20 2017 00:00:00 GMT-0400 (EDT)

Il y a une explication décente ici.

1
Community 23 mai 2017 à 12:17

Tu peux faire

...
// Get data of element and split it into an array
var ar = $('#dom-target').data('stuff').split(',');
// Use this array to get a Date
var parsedDate = new Date(Date.UTC.apply(null, ar));
// Do your logic
jQuery('#myCounter').mbComingsoon({expiryDate: parsedDate , speed: 500});
...
0
Camille 20 avril 2017 à 15:21