php语言

PHP面试题目:一周计算

时间:2024-09-25 10:49:53 赛赛 php语言 我要投稿
  • 相关推荐

PHP面试题目:一周计算

  无论是身处学校还是步入社会,我们最离不开的就是试题了,试题有助于被考核者了解自己的真实水平。还在为找参考试题而苦恼吗?下面是小编精心整理的PHP面试题目:一周计算,欢迎阅读与收藏。

PHP面试题目:一周计算

  PHP面试题目:一周计算

  这是一个相当常见的介绍性job-interview任务,在本文中我将解决和解释其背后的数学。我没有电影那么随意扔简化和修正我——我相信我是一个不必要的复杂的。本文将呈现接近问题的两个方面——一个可以让你精神这么做动态(给你的朋友留下深刻印象,我猜?),和一个电脑更友好(更少的代码行,更多)。

  日历的定义我得到了如下:

  每年有13个月 甚至每一个月21天,每个奇怪的月有22 13月缺少一天每个闰年 闰年是任何被5整除 每周7天:星期天,星期一,星期二,星期三,星期四,星期五,星期六

  任务如下:

  考虑到1900年的第一天是星期一,编写一个函数,将打印给定日期的星期。的例子中,输入{:17日月:11日:2013 }输出“星期六”。

  在本文的其余部分,我将使用以下日期格式:dd.mm。yyyy,因为它是什么是有意义的

  准备

  在开始任何聪明的风险之前,有一个适当的环境设置是很重要的,以避免浪费时间在那些可能是提前准备。我总是建议你进入编码面试任务跃跃欲试的开发环境,可以测试您的代码在片刻的注意。

  创建一个新文件夹包含两个子文件夹:classes,public。是的,这是一个一次性的任务,它可以解决一个简单的程序功能,但我喜欢彻底。你就会明白为什么。

  在classes子文件夹,创建一个空的PHP类CalendarCalc.php。在public子文件夹,创建一个文件index.php用下面的内容:

  如果你可以在浏览器中打开这个显示“Hello”,您已经准备好开始。

  CalendarCalc初始化

  使事情更容易验证和想象,我创建了一个演示方法从1.1.1900打印出整个日历。22.13.2013。这将使我们能够轻松地检查我们的计算功能。不过,首先初始化类一样:

  iNumDays = count($this->aDays);

  $this->iStartDayIndex = array_search(Monday, $this->aDays);

  $this->aInput = array(d => $day, m => $month, y => $year);

  }

  public function demo() {

  }

  }

  让我们解释受保护的属性。

  $aDays是一个数组。定义它确保每个星期有数字索引分配——至关重要的在确定星期后的一天。我们缓存它的长度$iNumDays财产。这让我们扩展数组在以后的日子里,如果我们选择——另一个任务可能会问同样的计算,但提到本周可能已经或多或少地超过7天。

  $iStartDayIndex是周一的索引(在本例中),因为一开始天周一(1.1.1900)被定义为在任务描述。当我们开始一天的索引,我们可以用它与计算抵消得到真正的星期。你会明白我的意思。

  $aInput是一个数组来保存输入值。当我们实例化CalendarCalc,我们通过的日期值我们想知道本周的日子。这个属性存储这些值,可供我们每想出calc方法,从而确保我们不需要它们,或者更糟的是,重复它们在另一个函数调用。的逻辑$aInput,$iStartDayIndex和$iNumDays是在__construct方法。

  其他属性都是不言而喻的。

  现在,填充demo()方法用下面的内容:

  public function demo() {

  $demoYear = $this->startYear;

  $totalDays = 0;

  while ($demoYear < 2014) {

  echo "$demoYear";

  $demoMonth = 1;

  while ($demoMonth < 14) {

  echo "";

  echo "";

  $dayCount = ($demoMonth % 2 == 1) ? 22 : 21;

  $dayCount = ($demoMonth == 13 && $demoYear % 5 == 0) ? 21 : $dayCount;

  $demoDay = 1;

  echo "";

  while ($demoDay <= $dayCount) {

  $index = ++$totalDays % 7;

  if ($demoDay == 1) {

  for ($i = 0; $i < $index-1; $i++) {

  echo "";

  }

  if ($index == 0 || $index == 7) {

  $i = 6;

  while ($i--) {

  echo "";

  }

  }

  }

  echo "";

  if ($index == 0) {

  echo "";

  }

  $demoDay++;

  }

  echo "";

  $demoMonth++;

  }

  echo "

  ";

  $demoYear++;

  }

  }

  别烦试图理解这种方法——它是完全不重要。这只是帮助我们验证工作,并根据第二个解决方案实际上是部分我们将在本文中呈现。

  改变的内容索引。php文件:

  demo();

  …并在浏览器中打开它。您应该看到一个日历输出,我们现在有一种检查结果17.11.2013真理(注意日期。确实是周六)。

  精神的方式

  心理的方法计算其实很简单。首先,我们需要的数量闰年日期之间的基地,和给定日期。1900是被5整除,本身就是一个闰年。跳跃的数量因此年之间的差异日期输入日期和基地,除以5,四舍五入(只有充分运行年统计,自然),1900年加一。创建一个新的方法CalendarCalc被称为calcFuture并给它这个内容:

  $iLeaps = floor(($this->aInput[y] - $this->startYear) / $this->leapInterval + 1);

  我们甚至还被告知,每个月有21天,和每一个奇怪的月有22:

  1 = > 22

  2 = > 21

  3 = > 22

  4 = > 21

  5 = > 22

  6 = > 21

  7 = > 22

  8 = > 21

  9 = > 22

  10 = > 21

  11 = > 22

  12 = > 21

  13 = > 22(或21日在闰年)

  总天数在一年,因此,280年,或者279年在闰年。如果我们的模7 280%,0,因为280年是被7整除。在闰年,模是6。

  这意味着每年的日历在同一天开始,除了闰年,当它开始那天,在前一年的第一天。因此,如果1.1.1900。周一:

  1.1.1901。是星期一

  1.1.1902。是星期天

  1.1.1903。是星期天

  1.1.1904。是星期天

  1.1.1905。是星期六

  1.1.1906。是星期六

  等…

  根据这一点,我们可以计算的数量一天行动,直到我们的输入。看到我们知道我们有23跳跃,直到输入日期(2013),我们搬回一天23倍。23%的模7是2,这意味着我们总算圆满3次,然后两天(这是抵消)——1.1.2013。是星期六。检查演示日历,看看自己。

  让我们先来了解代码。“飞跃”线以上,后添加以下:

  $iOffsetFromCurrent = $iLeaps % $this->iNumDays;

  $iNewIndex = $this->iStartDayIndex - $iOffsetFromCurrent;

  if ($iNewIndex < 0) {

  $iFirstDayInputYearIndex = $this->iStartDayIndex + $this->iNumDays - $iOffsetFromCurrent;

  } else {

  $iFirstDayInputYearIndex = $iNewIndex;

  }

  首先,我们计算偏移量。然后,我们计算日子的新索引数组,它取决于是否新指数是积极的。这给了我们一周的日子我们输入年开始。

  我们也知道,每个月X与下个月21天使当日月开始X,因为21% 7 = 0。然而奇怪的几个月里,开始提前一天(22% 7 = 1)。因此,如果1月从星期六开始,2月从周日开始,周日3月,4月,星期一,等等。我们得出这样的结论:每一个奇怪的月,通过了今年年初以来直到我们输入日期1月一天拥有先进的指数。我们在11月,所以奇怪有5个月。新抵消+ 5或在我们的案例中,2013年11月,周四开始。让我们把它变成代码立即在前面行。

  $iOddMonthsPassed = floor($this->aInput[m] / 2);

  $iFirstDayInputMonthIndex = ($iFirstDayInputYearIndex + $iOddMonthsPassed) % $this->iNumDays;

  现在剩下的就是看看远离本月初我们输入日期的一天。

  $iTargetIndex = ($iFirstDayInputMonthIndex + $this->aInput[d]-1) % $this->iNumDays;

  return $this->aDays[$iTargetIndex];

  我们添加减一天(因为天还没有通过!),模7日的天数。我们得到的数量是我们的目标指数,可靠地给我们星期六。

  从现在,整个calcFuture的方法CalendarCalc是这样的:

  /**

  * A more "mental" way of calculating the day of the week

  * @return mixed

  */

  public function calcFuture() {

  $iLeaps = floor(($this->aInput[y] - $this->startYear) / $this->leapInterval + 1);

  $iOffsetFromCurrent = $iLeaps % $this->iNumDays;

  $iNewIndex = $this->iStartDayIndex - $iOffsetFromCurrent;

  if ($iNewIndex < 0) {

  $iFirstDayInputYearIndex = $this->iStartDayIndex + $this->iNumDays - $iOffsetFromCurrent;

  } else {

  $iFirstDayInputYearIndex = $iNewIndex;

  }

  $iOddMonthsPassed = floor($this->aInput[m] / 2);

  $iFirstDayInputMonthIndex = ($iFirstDayInputYearIndex + $iOddMonthsPassed) % $this->iNumDays;

  $iTargetIndex = ($iFirstDayInputMonthIndex + $this->aInput[d]-1) % $this->iNumDays;

  return $this->aDays[$iTargetIndex];

  }

  machine-friendly方式

  也许更简单的方法是计算的天数,已基本日期、模,7和得到抵消。没有很多人可以计算数字的大小,不过,这就是为什么它更machine-friendly。

  再一次,我们需要跳跃:

  public function calcFuture2() {

  $iTotalDays = 0;

  $iLeaps = floor(($this->aInput[y] - $this->startYear) / $this->leapInterval + 1);

  }

  然后,考虑到年。经过数年的280次,减去的跳跃数占了天,加一,因为今年仍在进行中。

  $iTotalDays = (280 * ($this->aInput[y] - $this->startYear)) - $iLeaps + 1;

  然后,我们添加在总结所有的运行。

  $iTotalDays += floor($this->aInput[m] / 2) * 21 + floor($this->aInput[m] / 2) * 22;

  最后,我们添加输入日期的日子,再减去一天因为当前尚未通过:

  $iTotalDays += $this->aInput[d] - 1;

  return $this->aDays[$iTotalDays % $this->iNumDays];

  死很简单,不是吗?

  结论

  看到一个生活例子计算,请检查在这里。你可以浏览目录包含在该URL查看文件,或者您可以下载完整的源代码,演示网站,以及最后的CalendarCalc类,从GitHub。回购/演示稍微比本文中提供的代码——一些html5boilerplate用于更有组织性和启用ajax请求来检查您输入的日期作为他们,所以你不需要重新加载屏幕和再生日历每次检查日期。

  PHP面试题目:周一的计算

  在PHP中,我们可以使用date()函数来获取当前日期的详细信息。要计算周一,我们可以使用date()函数的格式参数和strtotime()函数来实现。

  首先,我们可以使用date(“w”)来获取当前日期的星期几。此函数返回的是一个0(表示星期日)到6(表示星期六)的数字。

  然后,我们可以使用strtotime()函数来计算出距离当前日期最近的周一的日期。具体操作是,我们可以使用”strtotime(‘next Monday’)”来获取下一个周一的日期。

  然后,我们可以使用date()函数来格式化这个日期,并将其输出。例如,我们可以使用date(“Y-m-d”)来将日期格式化为”年-月-日”的形式。

  下面是一个示例代码,演示了如何使用PHP来计算周一的日期:

  “`php

  $currentDate = date(“Y-m-d”);

  $currentDayOfWeek = date(“w”);

  $nextMonday = strtotime(‘next Monday’);

  $nextMondayDate = date(“Y-m-d”, $nextMonday);

  echo “当前日期:”.$currentDate.”

  “;

  echo “当前星期几:”.$currentDayOfWeek.”

  “;

  echo “下一个周一的日期:”.$nextMondayDate.”

  “;

  “`

【PHP面试题目:一周计算】相关文章:

英文题目的PHP面试题及答案03-19

php面试题03-18

2017年最新PHP笔试题目及答案03-02

最新PHP面试题11-17

PHP面试题及答案03-29

PHP面试之php自带的几个防止sql注入的函数03-03

流行的php面试题及答案03-28

php面试备考知识点11-22

PHP面试题及答案(汇总)11-22