簡體   English   中英

這個星期和時間是否已經過了本周或沒有 - PHP

[英]Has THIS day and time passed THIS week or not - PHP

我有一個存儲在數組中的一天和一周中的3個變量:

$shift['day'];
$shift['hour'];
$shift['meridian'];

所有3個在一起,分別輸出如下:

Friday 10 PM

DATE根本沒有使用,只是DAY和TIME,它顯然沒有存儲為時間戳。

我怎樣才能檢查這個星期和時間是否已經過了本周?

例如:

$today = date("l"); // Get current day "Monday"
$hour = date("g"); // Get current hour "3"
$meridian = date("A"); // Get current meridian "PM"

將我的當前值准備好與我的變量進行比較,但是我已經迷失了邏輯如何確定我的時間本周是否已經過去了?

任何幫助非常感謝。

邏輯:

  • 立即創建DateTime對象
  • Friday 10 PM創建DateTime對象。
  • 通過時間戳比較它們以查看哪個更大

碼:

$tz = new \DateTimeZone("UTC");
$now = new \DateTime("now", $tz);
$then = \DateTime::createFromFormat('l g A', 'Friday 10 PM', $tz);

if($then->getTimestamp() < $now->getTimestamp())
{
    echo 'Friday 10 PM has passed this week';
}
else
{
    echo 'No, Friday 10 PM has not passed this week';
}

回應$then->format('dmY, H:i:s')產生25.03.2016, 22:00:00 $then->format('dmY, H:i:s') 將日期從“星期五”更改為“星期六”正確地產生了3月26日,這是我用來驗證為給定字符串( Friday 10 PM )正確創建DateTime對象的情況。

DateTime類提供了許多工具來幫助實現這一點,而另一個答案已經使用它,但它迄今為止最大的優點是它實際上允許您以純粹的人工方式處理日期 - 您不必提供這些數字恰好具有數學意義!

所以這是一種方法來做到這一點......

顯然,我們需要先創建時間戳來進行比較:

// With no arguments, this is just the current timestamp
$now = DateTime();

// Tricky part here is to know that any omitted *calendar-type* values
// default to the current day, while *time* values default to 0s
$shift = DateTime::createFromFormat(
    'l g A',
    "{$shift['day']} {$shift['hour']} {$shift['meridian']}"
);

但是在DateTime類的PHP手冊中很難發現(至少在我寫這篇文章的時候)是DateTime :: diff()方法 ,它實際上只出現在DateTimeInterface的TOC上。
一旦你有了,你只需要知道+-符號意味着“未來”和“過去”:

if ($now->diff($shift)->format('%R') === '-')
{
    // $shift is in the past; i.e. Friday 10 PM has passed
}

當然你可以通過date()strtotime()和math來復制相同的東西,但這更具表現力和易於理解。

您可以使用date函數將值降低為整數,然后只使用條件。

$shift['day'] = 'Friday';
$shift['meridian'] = 'PM';
$hour = '10';
$shift['hour'] = ($shift['meridian'] == 'PM') ? $hour + 12 : $hour; //convert input to 24 hour
$today = date("N");
$current_hour = date("G");
if( date('N', strtotime($shift['day'])) <= $today &&  $current_hour <= $shift['hour']) {
    echo 'It hasn\'t occurred yet this week';
} else {
    echo 'It has occurreced this week';
}

......或作為一個班輪(假設$shift['hour']是24小時):

if( date('N', strtotime($shift['day'])) <=  date("N") &&  date("G") <= $shift['hour']) {

演示: https//eval.in/542298

確保你有正確的時區設置,否則午夜跌落可能會讓你失望。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM