Question

J'ai un système qui compare l'exercice à la date de la même gamme de date de l'année précédente. Vous pouvez régler l'année et le mois à regarder et il compare toujours la même plage de dates à l'année précédente. Je l'ai mis donc si le jour actuel est le jour bissextile il se compare au 28 de l'année dernière, et si l'année dernière a été l'année bissextile et est aujourd'hui le 28 février, il se compare à l'année dernière à 29. si vous regardez un mois autre que le mois en cours, il montre jusqu'au dernier jour de ce mois, sinon à jour en cours.

OK qui fonctionne très bien en ce moment, mais maintenant mes employeurs ne veulent pas que ce soit à la date actuelle, ils veulent aller à jour hier. Comment puis-je faire, mes principales préoccupations sont si aujourd'hui est le 1er du mois, ou si aujourd'hui est le premier jour de l'exercice.

Voici le code que j'ai maintenant:

function create_YTD_XML()
{
    global $month;
    global $year;

    $last_year = $year - 1;

    if($year == date('Y') && $month == date('m'))
    {
        $this_day = date('d');
    }
    else
    {
        $this_day = date('t', mktime(0, 0, 0, $month, 1, $year)); // LAST DAY OF MONTH
    }

    if(is_leap_year($year) && $this_day == 29)
    {
        $last_day = 28;
    }
    else if(is_leap_year($last_year) && $this_day == 28)
    {
        $last_day = 29;
    }
    else
    {
        $last_day = $this_day;
    }

    if($month >= 2)
    {
        $this_year_start = $year;
        $last_year_start = $last_year;
    }
    else
    {
        $this_year_start = $year - 1;
        $last_year_start = $last_year - 1;
    }

    $this_ytd_start = $this_year_start.'-02-01';
    $last_ytd_start = $last_year_start.'-02-01';

    $this_ytd_end = $year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$this_day;
    $last_ytd_end = $last_year.'-'.str_pad($month, 2, "0", STR_PAD_LEFT).'-'.$last_day;


}

Quelle serait la meilleure solution?

Merci!

Était-ce utile?

La solution

strtotime () fera l'affaire. Convertissez votre date antérieure à un horodatage Unix en utilisant mktime () , utilisez comme ceci:

$from_unix_time = mktime(0, 0, 0, $month, $day, $year);
$day_before = strtotime("yesterday", $from_unix_time);
$formatted = date('Y-m-d', $day_before);

Autres conseils

Vous pouvez également utiliser la fonction strtotime en utilisant mots comme ceci:

$date = '2012-11-08';
$day_before = date( 'Y-m-d', strtotime( $date . ' -1 day' ) );

La sortie de $day_before:

2012-11-07

Vous pouvez compter sur la capacité de mktime () pour travailler avec des valeurs « incorrectes ». Supposons que $ année, mois $ et $ jour sont jour en cours.

$yesterday = mktime (0, 0, 0, $month, $day - 1, $year);
echo date ('Y-m-d', $yesterday);

Ne vous inquiétez pas, il suffit de faire la bonne chose: vous essayez avec des valeurs différentes

.

Remarque: La réponse suivante ne prend pas l'heure d'été en compte; pendant certaines périodes de l'année, il retournera un résultat inexact. Voir les commentaires pour plus d'informations.


Depuis la longueur d'un jour est constante (86.400 secondes), vous pouvez utiliser l'arithmétique pour déterminer l'horodatage du jour avant une date donnée:

$yesterday = date('Y-m-d', strtotime($current_date) - 86400);

$current_date est la date que vous voulez trouver la veille. Si elle est déjà un timestamp unix , vous pouvez vous passer strtotime() entièrement:

$yesterday = date('Y-m-d', $current_date_as_unix_timestamp - 86400);
$date = date('Y-m-d',strtotime('yesterday'));

J'utiliser strtotime en effet, de cette manière:

$date="2014-02-20";
echo date("Y-m-d",strtotime($date." -1 day"));

est sortie:

2014-02-19

Je pense que cela dépend du comportement de votre employeur veut. Il n'y a pas de réponse, si aujourd'hui est le début d'un exercice « droit », est-ce qu'ils veulent voir les deux derniers exercices par rapport (qui est ce qui se passerait si vous avez utilisé hier comme « jusqu'à » date) ou ce qu'ils veulent voir le jour 1 de l'exercice par rapport au jour 1 de la dernière? Vous devez vous asseoir et déterminer les cas de pointe potentiels puis parler avec votre employeur au sujet de ce qu'ils veulent.

Vous pouvez également utiliser le code suivant ses œuvres:

$current_date = strtotime('25-11-2012');
echo $yesterday = date('Y-m-d', strtotime('-1 day', $current_date));

et la sortie du code suivant:

2012-11-24

Un jour avant l'heure à 07:59:59 fixe

$demo = date("Y-m-d H:i:s", mktime(7, 59, 59, date("m"),date("d")-1,date("Y")));    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top