2010-07-30 40 views
0

我的背景是C,Java,C#和VB.NET,但我必須處理一些基本的PHP內容。我已經得到這行代碼:在PHP中,如果一個變量包含日期時間,那麼operator--會做什麼?

if($flag) $event_end--; 

到底什麼是減少?原始蜱? $ flag(我認爲)表示該事件是否爲全天事件,起始日期爲7/1/2010,結束日期爲7/2/2010。是否 - 實質上使$ event_end [7/1/2010 11:59:59.99999 PM]?

- 編輯:好的,技術問題的基本規則:解釋你在說什麼。有罪。 $ event_end最初是使用mktime()函數設置的。這有幫助嗎?

+0

不是你的問題的答案,但對於日期時間對象,最好使用'Datetime :: add()'和'Datetime :: sub()'http://au.php.net/manual/en /datetime.signed.php – 2010-07-30 12:33:15

+3

$ event_end中的確切內容是什麼? – Toto 2010-07-30 12:36:22

回答

1

在日期時間首先調用strtotime()等函數嗎?該函數將返回對應於日期和時間的Unix時間戳。如果時間是0(即午夜),從它減去1(即帶走1秒),結果將是23:59:59的時間。

$event_end = '2010-07-30 00:00:00'; 
$event_end = strtotime($event_end); 
$event_end--; 
$event_end = date("Y-m-d H:i:s",$event_end); 
echo $event_end; //This will result in '2010-07-29 23:59:59' 

PHP看到datetime值(如從MySQL查詢爲例)作爲簡單的字符串,除非它們是在這種情況下,我不認爲從中減去會做任何事情的DateTime對象。運算符影響值的唯一方法是如果它是時間戳整數。

編輯: 啊,我看它使用mktime()。這也返回一個Unix時間戳,因此可以數學運算。所以,要回答你的問題,$event_end--;的確減去了一秒。

更新的代碼:

$event_end = mktime(0, 0, 0, 7, 30, 2010); 
$event_end--; 
$event_end = date("Y-m-d H:i:s",$event_end); 
echo $event_end; //This will result in '2010-07-29 23:59:59' 
-1

它完全取決於如何設置$ event_end:PHP沒有'datetime'的本機概念。它可能是幾秒,幾毫秒甚至幾天,具體取決於它來自哪裏。

+0

PHP *確實*具有DateTime類:http://us2.php.net/manual/en/class.datetime.php – 2010-07-30 12:35:43

+0

DateTime是一個擴展名,您可以使用或不使用它:它不是該語言的一部分。而OP沒有表明他們正在使用DateTime。 – 2010-07-30 12:52:51

+2

手冊:'安裝:使用這些功能不需要安裝;它們是PHP核心的一部分。「(自5.2開始) 而OP在問題標題中使用了」datetime「這個詞 – Mchl 2010-07-30 13:06:31

0

你的意思是一個DateTime對象?據我所知,什麼都沒有發生。

>> $a = new DateTime() 
DateTime::__set_state(array(
    'date' => '2010-07-30 12:32:22', 
    'timezone_type' => 3, 
    'timezone' => 'UTC', 
)) 
>> $a--; 
DateTime::__set_state(array(
    'date' => '2010-07-30 12:32:22', 
    'timezone_type' => 3, 
    'timezone' => 'UTC', 
)) 

如果您將日期/時間存儲爲字符串,請參閱字符串如何在手冊中轉換爲數字部分。

0

如果$ event_end由mktime設置(),那麼它是包含了從Unix紀元秒之間(1970 00:00:00 GMT 1月1日)的數量long整數,指定的時間。

$event_end--將減少一(1秒)。

相關問題