Comment filtrer les données json par plage de date en javascript
Je veux le filtre ci-dessous les données json par date de début et date de fin, il doit retourner les données entre les date de début et date de fin, j'ai essayé de réaliser à l'aide de code ci-dessous mais je fais mal quelque chose à filtre. Je suis nouveau avant la fin de technologies telles que Javascript et jquery, il serait apprécié si Quelqu'un peut me corriger ce que je fais mal ici:
<html>
<head>
<title>Test</title>
</head>
<body>
<script type="text/javascript">
var product_data = [
{
"productId": "12",
"productName": "ProductA",
"productPrice": "1562",
"ProductDateCreated": "2015-07-24T12:58:17.430Z",
"TotalProduct": 294
},
{
"productId": "13",
"productName": "ProductB",
"productPrice": "8545",
"TotalProduct": 294,
"ProductHits": {
"2015-08-01T00:00:00Z"
}
},
{
"productId": "14",
"productName": "ProductC",
"productPrice": "8654",
"TotalProduct": 78,
"ProductHits": {
"2015-08-10T00:00:00Z"
}
},
{
"productId": "15",
"productName": "ProductD",
"productPrice": "87456",
"TotalProduct": 878,
"ProductHits": {
"2015-05-12T00:00:00Z"
}
}
];
var startDate = "2015-08-04";
var endDate = "2015-08-12";
var resultProductData = product_data.filter(
function (a)
{
return (a.ProductHits) > startDate && (a.ProductHits) < endDate;
});
console.log(resultProductData);
</script>
</body>
</html>
vous comparez des chaînes. vous devez comparer des dates. Solution: convertir les chaînes de caractères à la Date d'objets et de les comparer. EDIT: ProductHits est pas de string. c'est un objet. vous devez convertir toutes les clés de cet objet et de les comparer entre eux, un par un.
Comment convertir clés comme objet?
première: dites-moi pls pourquoi il y a des espaces dans votre date de chaînes de caractères après la virgule?
deuxième: dites-moi pls la règle pour ProductHits. il existe de multiples entrées (les dates). ont-ils correspondre à la plage ou un seul d'entre eux?
aaand (le dernier ;)). vous êtes sûr que c'coque ProductHits et pas ProductDateCreated ? Dans mon opnion qui aurait plus de sens...
Comment convertir clés comme objet?
première: dites-moi pls pourquoi il y a des espaces dans votre date de chaînes de caractères après la virgule?
deuxième: dites-moi pls la règle pour ProductHits. il existe de multiples entrées (les dates). ont-ils correspondre à la plage ou un seul d'entre eux?
aaand (le dernier ;)). vous êtes sûr que c'coque ProductHits et pas ProductDateCreated ? Dans mon opnion qui aurait plus de sens...
OriginalL'auteur jquery beginner | 2015-08-13
Vous devez vous connecter pour publier un commentaire.
violon: http://jsfiddle.net/4nz1ahuw/
Mise à JOUR comme Ates Goral suggère dans les commentaires de la solution ci-dessus peut être optimisée par l'utilisation de Tableau.protype.certains:
je vous remercie pour vos bons conseils 🙂
Array.prototype.some
comme l'optimisation:return Object.keys(a.ProductHits || {}).some(function (dateStr) { var date = new Date(dateStr); return date >= startDate && date <= endDate; });
(Termine l'itération du moment qu'il y a un match.)de bons conseils. N'hésitez pas à modifier dans le post comme une mise à jour de bloc si vous le souhaitez. merci 🙂
Mon plaisir. Je ne voulais pas gâcher la clarté de votre réponse 🙂
l'ajout de votre solution pour la réponse. J'espère qu'il est aussi clairement documentées 😉
cela dépend de votre fuseau horaire. voir la -0700 à la fin de la date? 17:00:00 heures + 7 heures à minuit. Si vous voulez vonvert la date à GMT +0 vous pouvez utiliser
Date.prototype.getTimezoneOffset()
etDate.prototype.valueOf()
. mais pensez-y: le dow-il question? toutes les dates sont modifiées de la même façon et de les comparer avec une baisse des opérateurs. donc... ça ne compte pas 😉OriginalL'auteur Joshua K