av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

php語(yǔ)言

PHP面試題目:一周計(jì)算

時(shí)間:2025-03-05 10:03:32 賽賽 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

PHP面試題目:一周計(jì)算

  無(wú)論是身處學(xué)校還是步入社會(huì),我們最離不開的就是試題了,試題有助于被考核者了解自己的真實(shí)水平。還在為找參考試題而苦惱嗎?下面是小編精心整理的PHP面試題目:一周計(jì)算,歡迎閱讀與收藏。

PHP面試題目:一周計(jì)算

  PHP面試題目:一周計(jì)算

  這是一個(gè)相當(dāng)常見(jiàn)的介紹性job-interview任務(wù),在本文中我將解決和解釋其背后的數(shù)學(xué)。我沒(méi)有電影那么隨意扔簡(jiǎn)化和修正我——我相信我是一個(gè)不必要的復(fù)雜的。本文將呈現(xiàn)接近問(wèn)題的兩個(gè)方面——一個(gè)可以讓你精神這么做動(dòng)態(tài)(給你的朋友留下深刻印象,我猜?),和一個(gè)電腦更友好(更少的代碼行,更多)。

  日歷的定義我得到了如下:

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

  任務(wù)如下:

  考慮到1900年的第一天是星期一,編寫一個(gè)函數(shù),將打印給定日期的星期。的例子中,輸入{:17日月:11日:2013 }輸出“星期六”。

  在本文的其余部分,我將使用以下日期格式:dd.mm。yyyy,因?yàn)樗鞘裁词怯幸饬x的

  準(zhǔn)備

  在開始任何聰明的風(fēng)險(xiǎn)之前,有一個(gè)適當(dāng)?shù)沫h(huán)境設(shè)置是很重要的,以避免浪費(fèi)時(shí)間在那些可能是提前準(zhǔn)備。我總是建議你進(jìn)入編碼面試任務(wù)躍躍欲試的開發(fā)環(huán)境,可以測(cè)試您的代碼在片刻的注意。

  創(chuàng)建一個(gè)新文件夾包含兩個(gè)子文件夾:classes,public。是的,這是一個(gè)一次性的任務(wù),它可以解決一個(gè)簡(jiǎn)單的程序功能,但我喜歡徹底。你就會(huì)明白為什么。

  在classes子文件夾,創(chuàng)建一個(gè)空的PHP類CalendarCalc.php。在public子文件夾,創(chuàng)建一個(gè)文件index.php用下面的內(nèi)容:

  如果你可以在瀏覽器中打開這個(gè)顯示“Hello”,您已經(jīng)準(zhǔn)備好開始。

  CalendarCalc初始化

  使事情更容易驗(yàn)證和想象,我創(chuàng)建了一個(gè)演示方法從1.1.1900打印出整個(gè)日歷。22.13.2013。這將使我們能夠輕松地檢查我們的計(jì)算功能。不過(guò),首先初始化類一樣:

  iNumDays = count($this->aDays);

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

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

  }

  public function demo() {

  }

  }

  讓我們解釋受保護(hù)的屬性。

  $aDays是一個(gè)數(shù)組。定義它確保每個(gè)星期有數(shù)字索引分配——至關(guān)重要的在確定星期后的一天。我們緩存它的長(zhǎng)度$iNumDays財(cái)產(chǎn)。這讓我們擴(kuò)展數(shù)組在以后的日子里,如果我們選擇——另一個(gè)任務(wù)可能會(huì)問(wèn)同樣的計(jì)算,但提到本周可能已經(jīng)或多或少地超過(guò)7天。

  $iStartDayIndex是周一的索引(在本例中),因?yàn)橐婚_始天周一(1.1.1900)被定義為在任務(wù)描述。當(dāng)我們開始一天的索引,我們可以用它與計(jì)算抵消得到真正的星期。你會(huì)明白我的意思。

  $aInput是一個(gè)數(shù)組來(lái)保存輸入值。當(dāng)我們實(shí)例化CalendarCalc,我們通過(guò)的日期值我們想知道本周的日子。這個(gè)屬性存儲(chǔ)這些值,可供我們每想出calc方法,從而確保我們不需要它們,或者更糟的是,重復(fù)它們?cè)诹硪粋(gè)函數(shù)調(diào)用。的邏輯$aInput,$iStartDayIndex和$iNumDays是在__construct方法。

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

  現(xiàn)在,填充demo()方法用下面的內(nèi)容:

  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++;

  }

  }

  別煩試圖理解這種方法——它是完全不重要。這只是幫助我們驗(yàn)證工作,并根據(jù)第二個(gè)解決方案實(shí)際上是部分我們將在本文中呈現(xiàn)。

  改變的內(nèi)容索引。php文件:

  demo();

  …并在瀏覽器中打開它。您應(yīng)該看到一個(gè)日歷輸出,我們現(xiàn)在有一種檢查結(jié)果17.11.2013真理(注意日期。確實(shí)是周六)。

  精神的方式

  心理的方法計(jì)算其實(shí)很簡(jiǎn)單。首先,我們需要的數(shù)量閏年日期之間的基地,和給定日期。1900是被5整除,本身就是一個(gè)閏年。跳躍的數(shù)量因此年之間的差異日期輸入日期和基地,除以5,四舍五入(只有充分運(yùn)行年統(tǒng)計(jì),自然),1900年加一。創(chuàng)建一個(gè)新的方法CalendarCalc被稱為calcFuture并給它這個(gè)內(nèi)容:

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

  我們甚至還被告知,每個(gè)月有21天,和每一個(gè)奇怪的月有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日在閏年)

  總天數(shù)在一年,因此,280年,或者279年在閏年。如果我們的模7 280%,0,因?yàn)?80年是被7整除。在閏年,模是6。

  這意味著每年的日歷在同一天開始,除了閏年,當(dāng)它開始那天,在前一年的第一天。因此,如果1.1.1900。周一:

  1.1.1901。是星期一

  1.1.1902。是星期天

  1.1.1903。是星期天

  1.1.1904。是星期天

  1.1.1905。是星期六

  1.1.1906。是星期六

  等…

  根據(jù)這一點(diǎn),我們可以計(jì)算的數(shù)量一天行動(dòng),直到我們的輸入?吹轿覀冎牢覀冇23跳躍,直到輸入日期(2013),我們搬回一天23倍。23%的模7是2,這意味著我們總算圓滿3次,然后兩天(這是抵消)——1.1.2013。是星期六。檢查演示日歷,看看自己。

  讓我們先來(lái)了解代碼!帮w躍”線以上,后添加以下:

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

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

  if ($iNewIndex < 0) {

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

  } else {

  $iFirstDayInputYearIndex = $iNewIndex;

  }

  首先,我們計(jì)算偏移量。然后,我們計(jì)算日子的新索引數(shù)組,它取決于是否新指數(shù)是積極的。這給了我們一周的日子我們輸入年開始。

  我們也知道,每個(gè)月X與下個(gè)月21天使當(dāng)日月開始X,因?yàn)?1% 7 = 0。然而奇怪的幾個(gè)月里,開始提前一天(22% 7 = 1)。因此,如果1月從星期六開始,2月從周日開始,周日3月,4月,星期一,等等。我們得出這樣的結(jié)論:每一個(gè)奇怪的月,通過(guò)了今年年初以來(lái)直到我們輸入日期1月一天擁有先進(jìn)的指數(shù)。我們?cè)?1月,所以奇怪有5個(gè)月。新抵消+ 5或在我們的案例中,2013年11月,周四開始。讓我們把它變成代碼立即在前面行。

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

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

  現(xiàn)在剩下的就是看看遠(yuǎn)離本月初我們輸入日期的一天。

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

  return $this->aDays[$iTargetIndex];

  我們添加減一天(因?yàn)樘爝沒(méi)有通過(guò)!),模7日的天數(shù)。我們得到的數(shù)量是我們的目標(biāo)指數(shù),可靠地給我們星期六。

  從現(xiàn)在,整個(gè)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方式

  也許更簡(jiǎn)單的方法是計(jì)算的天數(shù),已基本日期、模,7和得到抵消。沒(méi)有很多人可以計(jì)算數(shù)字的大小,不過(guò),這就是為什么它更machine-friendly。

  再一次,我們需要跳躍:

  public function calcFuture2() {

  $iTotalDays = 0;

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

  }

  然后,考慮到年。經(jīng)過(guò)數(shù)年的280次,減去的跳躍數(shù)占了天,加一,因?yàn)榻衲耆栽谶M(jìn)行中。

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

  然后,我們添加在總結(jié)所有的運(yùn)行。

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

  最后,我們添加輸入日期的日子,再減去一天因?yàn)楫?dāng)前尚未通過(guò):

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

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

  死很簡(jiǎn)單,不是嗎?

  結(jié)論

  看到一個(gè)生活例子計(jì)算,請(qǐng)檢查在這里。你可以瀏覽目錄包含在該URL查看文件,或者您可以下載完整的源代碼,演示網(wǎng)站,以及最后的CalendarCalc類,從GitHub;刭(gòu)/演示稍微比本文中提供的代碼——一些html5boilerplate用于更有組織性和啟用ajax請(qǐng)求來(lái)檢查您輸入的日期作為他們,所以你不需要重新加載屏幕和再生日歷每次檢查日期。

  PHP面試題目:周一的計(jì)算

  在PHP中,我們可以使用date()函數(shù)來(lái)獲取當(dāng)前日期的詳細(xì)信息。要計(jì)算周一,我們可以使用date()函數(shù)的格式參數(shù)和strtotime()函數(shù)來(lái)實(shí)現(xiàn)。

  首先,我們可以使用date(“w”)來(lái)獲取當(dāng)前日期的星期幾。此函數(shù)返回的是一個(gè)0(表示星期日)到6(表示星期六)的數(shù)字。

  然后,我們可以使用strtotime()函數(shù)來(lái)計(jì)算出距離當(dāng)前日期最近的周一的日期。具體操作是,我們可以使用”strtotime(‘next Monday’)”來(lái)獲取下一個(gè)周一的日期。

  然后,我們可以使用date()函數(shù)來(lái)格式化這個(gè)日期,并將其輸出。例如,我們可以使用date(“Y-m-d”)來(lái)將日期格式化為”年-月-日”的形式。

  下面是一個(gè)示例代碼,演示了如何使用PHP來(lái)計(jì)算周一的日期:

  “`php

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

  $currentDayOfWeek = date(“w”);

  $nextMonday = strtotime(‘next Monday’);

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

  echo “當(dāng)前日期:”.$currentDate.”

  “;

  echo “當(dāng)前星期幾:”.$currentDayOfWeek.”

  “;

  echo “下一個(gè)周一的日期:”.$nextMondayDate.”

  “;

  “`

【PHP面試題目:一周計(jì)算】相關(guān)文章:

php面試題目有哪些08-09

2017最新PHP經(jīng)典面試題目07-12

最新PHP經(jīng)典面試題目匯總10-28

PHP算法面試題目及答案10-21

英文題目的PHP面試題及答案08-21

八個(gè)PHP數(shù)組面試題目08-15

PHP程序員面試題目整理09-30

PHP面試常見(jiàn)題型09-23

PHP面試常用知識(shí)09-11