2010-07-30 44 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秒)。

相关问题