PHP exploite les dates et les chaînes pour calculer avec précision l'âge

墨辰丷
Libérer: 2023-03-29 21:40:01
original
1286 Les gens l'ont consulté

Cet article présente principalement PHP pour exploiter les dates et les chaînes afin de calculer avec précision l'âge. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Le code est le suivant :

<?php
 
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 
class Age {
   
  /**
   * 计算年龄精准到年月日
   * @param type $birthday
   * @return array
   */
 
  public function calAge($birthday) {
    list($byear, $bmonth, $bday) = explode(&#39;-&#39;, $birthday);
    list($year, $month, $day) = explode(&#39;-&#39;, date(&#39;Y-m-d&#39;));
    $bmonth = intval($bmonth);
    $bday = intval($bday);
    if ($bmonth < 10) {
      $bmonth = &#39;0&#39; . $bmonth;
    }
    if ($bday < 10) {
      $bday = &#39;0&#39; . $bday;
    }
    $bi = intval($byear . $bmonth . $bday);
    $ni = intval($year . $month . $day);
    $not_birth = 0;
    if ($bi > $ni) {
      $not_birth = 1;
      $tmp = array($byear, $bmonth, $bday);
      list($byear, $bmonth, $bday) = array($year, $month, $day);
      list($year, $month, $day) = $tmp;
      list($bi, $ni) = array($ni, $bi);
    }
    $years = 0;
    while (($bi + 10000) <= $ni) {//先取岁数
      $bi += 10000;
      $years++;
      $byear++;
    }//得到岁数后 抛弃年
    list($m, $d) = $this->getMD(array($year, $month, $day), array($byear, $bmonth, $bday));
    return array(&#39;year&#39; => $years, &#39;month&#39; => $m, &#39;day&#39; => $d, &#39;not_birth&#39; => $not_birth);
  }
 
  /**
   * 只能用于一年内计算
   * @param type $ymd
   * @param type $bymd
   */
  public function getMD($ymd, $bymd) {
    list($y, $m, $d) = $ymd;
    list($by, $bm, $bd) = $bymd;
    if (($m . $d) < ($bm . $bd)) {
      $m +=12;
    }
    $month = 0;
    while ((($bm . $bd) + 100) <= ($m . $d)) {
      $bm++;
      $month++;
    }
    if ($bd <= $d) {//同处一个月
      $day = $d - $bd;
    } else {//少一个月
      $mdays = $bm > 12 ? $this->_getMothDay( ++$by, $bm - 12) : $this->_getMothDay($by, $bm);
      $day = $mdays - $bd + $d;
    }
    return array($month, $day);
  }
 
  private function _getMothDay($year, $month) {
    switch ($month) {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
        $day = 31;
        break;
      case 2:
        $day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天
        break;
      default:
        $day = 30;
        break;
    }
    return $day;
  }
 
}
 
$cage = new Age();
$test = array(
  &#39;1990-06-12&#39;,
  &#39;1990-07-13&#39;,
  &#39;1990-08-16&#39;,
  &#39;1990-10-10&#39;,
  &#39;1990-10-13&#39;,
  &#39;1990-10-15&#39;,
  &#39;1990-11-9&#39;,
  &#39;1990-11-22&#39;,
  &#39;2016-11-22&#39;,
  &#39;2016-8-22&#39;,
  &#39;2016-10-13&#39;,
);
echo date(&#39;Y-m-d&#39;);
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
foreach($test as $v){
  $tmp = $cage->calAge($v);
  echo $v , &#39;:&#39;, $tmp[&#39;year&#39;], &#39;年&#39;, $tmp[&#39;month&#39;],
 &#39;月&#39;, $tmp[&#39;day&#39;], &#39;天&#39;, &#39;;&#39;, $tmp[&#39;not_birth&#39;], &#39;<br>&#39;;
}
echo &#39;
' ; /* 运行结果: 2015-10-13 1990-06-12:25年4月1天;0 1990-07-13:25年3月0天;0 1990-08-16:25年1月27天;0 1990-10-10:25年0月3天;0 1990-10-13:25年0月0天;0 1990-10-15:24年11月28天;0 1990-11-9:24年11月4天;0 1990-11-22:24年10月21天;0 2016-11-22:1年1月9天;1 2016-8-22:0年10月9天;1 2016-10-13:1年0月0天;1 * */
Copier après la connexion

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Exemple d'analyse de l'algorithme de chiffrement du mot de passe utilisateur PHP

Exemple d'analyse de la fonction d'accès au système d'authentification unique SSO implémenté par PHP

Explication détaillée de l'exemple de fonction de robot d'exploration multithread du pool de threads implémenté par php et python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal