【问题标题】:PHP Date issues [duplicate]PHP日期问题[重复]
【发布时间】:2014-11-04 00:19:19
【问题描述】:

我有一个问题。 我正在试图找出这个问题的答案,但我似乎无法把我的想法包裹起来。 希望有人可以帮助我。 问题是:

编写一个函数,将某人的名字、姓氏、出生年月日作为参数,并返回全名+年龄。确保应用程序/程序也在 2015 年或以后返回正确的结果。检查前 2 个参数是否为字符串,第三个参数是否为整数。

因为我是 PHP 新手,对日期一无所知(我在 Google 上搜索过,但我无法全神贯注) 提前致谢! :) (自己写了一些代码试试,但没用所以我把它省略了)

【问题讨论】:

  • 关注点分离,做一个计算年龄的函数,把第一个/最后一个名字排除在外。 - stackoverflow.com/questions/3776682/php-calculate-age
  • 在寻求 SO 帮助之前,请至少尝试编写一些代码。
  • 我确实写了一些代码,但它根本没有任何意义,所以我认为最好不要发布它以免造成混乱。
  • 你能举个例子吗third argument is an integer
  • 你的意思是说“在 2015 年或以后也能返回正确的结果。”

标签: php date


【解决方案1】:

您可以使用DateTime 类进行简单的日期时间操作。

function getAge($name, $surname, $b_year, $b_month, $b_date)
{
    $today = new DateTime();
    $birthdate = new DateTime($b_year . '-' . $b_month . '-' . $b_date);
    $diff = $today->diff($birthdate);

    return $name . ' ' . $surname . ' is ' . $diff->format('%y years') . ' old';
}

echo getAge('Mr.', 'Smith', 1990, 12, 12);

输出:

Mr. Smith is 23 years old

Live preview


检查前 2 个参数是否为字符串,第三个参数是否为整数。

我相信这对你来说不会是问题:)。

有用的资源:

【讨论】:

  • 非常感谢,就像你上面的那个一样,它工作得很好。它给了我一个很好的例子,并开始摆弄和调整其他一些事情:)并尝试自己提出后续问题:)
【解决方案2】:

为什么不创建一个 Person 对象并创建一些方法来处理逻辑和格式。喜欢:

class Person {

   public $firstName, $lastName, $dob;

   public function __construct($firstName, $lastName, $dob) {
      $this->firstName = $firstName;
      $this->lastName = $lastName;
      $this->dob = new DateTime($dob);
   }

   public function getFullname() {
      return $firstName . ' ' . $lastName;
   }

   public function getAge($onDate=null) {
      if ($onDate === null) $onDate = date('Y-m-d');
      $onDate = new DateTime($onDate);

      $ageOnDate = $this->dob->diff($onDate)->y;
      return $ageOnDate;
   }

}

$dude = new Person('John', 'Doe', '1980-01-15');
echo $dude->getFullName() . "\n";
echo $dude->getAge() . "\n"; // get his age today
echo $dude->getAge('2015-06-01'); // get his age on June 1st, 2015

【讨论】:

  • “写一个函数”。他们可能还没有接触到面向对象的编程,所以如果你要做他的功课,那就把它当作一个函数来做吧。
  • 这是一个熟悉 OO 的绝佳练习案例。但他没有要求。那是因为他可能不知道它的存在。所以我们不要告诉他。或者让我们......我只是想我会分享大多数程序员处理这个问题的方式。
  • 大声笑,这不是我的作业,它是学习如何使用日期等的练习,但我什么都不懂,所以我宁愿寻求帮助,然后摆弄它以弄清楚它是如何工作的:) 不过还是谢谢
【解决方案3】:

使用这个功能

<?php
    function get_the_user($fname, $lname,$m ,$d,$y)


      $birthDate =$m.'/'.$d.'/'.$y;
      //explode the date to get month, day and year
      $birthDate = explode("/", $birthDate);
      //get age from date or birthdate
      $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
        ? ((date("Y") - $birthDate[2]) - 1)
        : (date("Y") - $birthDate[2]));
      echo "Age is:" . $age;
    return $fname.' '.$lname.'is '.$age.' old';
    ?>

【讨论】:

    【解决方案4】:

    这是一个简单的函数

    //birthday YYYY-MM-DD
    function userInfo($fname, $lname, $birthday) {
       //Calc age 
       $age = date_diff(date_create($birthday), date_create('today'))->y;  
       return $fname ." ". $lname . " ".$age;
    }
    

    现在叫它

    echo userInfo('John', 'Doe', '1986-02-01');
    

    【讨论】:

    • 酷,这似乎正是我所需要的。我怎么真的不明白代码。 Date_create 是一个 PHP 内置函数,我还假设 date_diff 吗? (我会尝试在谷歌上搜索更多信息以更好地理解它!我真的需要学习如何在代码中思考^_^
    【解决方案5】:
    <?php
    function getAge($f_name, $l_name, $b_day, $b_month, $b_year) {
    
      //date in mm/dd/yyyy format; or it can be in other formats as well
      $birthDate = $b_month . "/" . $b_day . "/" . $b_year;
      //explode the date to get month, day and year
      $birthDate = explode("/", $birthDate);
      //get age from date or birthdate
      $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
        ? ((date("Y") - $birthDate[2]) - 1)
        : (date("Y") - $birthDate[2]));
      return $f_name ." ". $l_name ." is: " . $age;
    }
    ?>
    

    【讨论】:

    • 感谢您的回答,我怎么猜它从我的尝试中起作用。但我认为这对于我真正需要的东西来说太复杂了:)
    • 很快就完成了,显然有更好的方法,您还需要检查变量以确保它们是 int 而不是字符串等
    猜你喜欢
    • 2013-07-23
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多