(fixe et fonctionne très bien, mais si quelqu'un veut encore factoriser, laisser une note)optimisation php nécessaire: plage de dates -> mois
Ceci est une version dépouillée d'une fonction je, qui le fait sur une plage de dates et attribue un entier unique à chaque ...
Lorsque vous travaillez avec des ensembles de données volumineux, en les exécutant plusieurs fois sur des plages de dates différentes, j'obtiens une erreur fatale, en affectant trop de mémoire au script et il meurt dans cette boucle ...
Fatal error: Allowed memory size of 268435456 bytes exhausted
fixe, était un problème avec l'itération ne prenant pas en compte le potentiel lumière du jour épargne-temps
Alors, je me demandais si quelqu'un pourrait recommander une façon plus optimale de production cette liste de mois/ints ...
Il doit me permettre de commencer Int quel que soit le nombre que j'aime et
<?php
// updated: 2010.11.04 with Qwerty's recommendations
// for fixing daylight savings time issue
function monthIterate($monthInt, $startDate, $stopDate) {
$epoch = $startMain = strtotime($startDate);
$stopMain = strtotime($stopDate);
while ($epoch <= $stopMain) {
// get the start/stop dates for "this month"
$start = date("Y-m-01", $epoch);
$stop = date("Y-m-t", $epoch);
// uniqueID for the month
$monthKey = "Month#-".str_pad($monthInt, 3, "0", STR_PAD_LEFT);
$months[$monthKey] = compact('start', 'stop');
// move forward in loop, +1 day should get us to the next month
$epoch = strtotime($stop);
$currentMonth = $nextMonth = date('m', $epoch);
while ($currentMonth == $nextMonth) {
$epoch = $epoch + 86400;
$nextMonth = date('m', $epoch);
}
$monthInt++;
}
return $months;
}
?>
Bien que vous pourriez être mieux servis en utilisant la nouvelle 'DateInterval' classe et autres, cela semble fonctionner, et je doute sérieusement que c'est le porc de mémoire, le problème est probablement dans une autre partie du code (run avec 'xdebug' et activer delta de la mémoire pour une belle vue d'ensemble) – Wrikken
http://stackoverflow.com/questions/2155110/php-loop-thru-all-months-in-date-range essayez celui-là –