取当前日期时间并设置2个日期时间变量? (上午6点 - 上午5:59)

问题描述:

我正在尝试创建活动页面,并且我想创建2个datetime变量。他们会拿现在的时间,并在上午06:00创建一个变量,在05:59上午创建一个变量。取当前日期时间并设置2个日期时间变量? (上午6点 - 上午5:59)

我遇到的问题是与计算。

如果一个人逛上页面3月17日,晚上11点 - 然后VAR1将3月17日06:00和var 18年3月2日上午05时59分

但是,如果一个人在查看网页3月18日凌晨01:00,然后VAR 1仍然是3月17日06:00,同样也适用于VAR2。

我该如何取下面的$ date变量,并对其他2个变量进行计算?

date_default_timezone_set('America/New_York'); 
$date = date('Y-m-d H:i:s', time()); 

+0

否,该网页是夜总会 - 有时人可能会在凌晨1点或2点检查看看还在开放什么。这就是为什么我不希望1AM的页面突然显示下一个晚上的新活动,当时还有一些活动正在进行。这两个变量让我的MySQL脚本根据当前日期和时间知道要选择哪些数据。 – pufAmuf 2012-03-17 19:21:47

你可以简单地查询当前小时,看它是否小于6;如果是,那么当前逻辑日的开始(根据你的规则)是昨天上午6点;否则是今天早上6点。鉴于此,strtotime可以平凡地让你“开始”的时间,并增加一天,让你“结束”的时间。

date_default_timezone_set('America/New_York'); 
$currentHour = date('H'); 
if ($currentHour < 6) { 
    // logical day started yesterday 
    $start = strtotime('yesterday 06:00'); 
    $end = strtotime('today 05:59:59'); 
} 
else { 
    // logical day started today 
    $start = strtotime('today 06:00'); 
    $end = strtotime('tomorrow 05:59:59'); 
} 

echo "The current logical day started on ".date('Y-m-d H:i:s', $start); 
echo " and it ends on ".date('Y-m-d H:i:s', $end); 
+0

谢谢乔恩!但是,我怎样才能把它变成2个日期时间变量,这些变量可以输入到我的MySQL数据库中?例如,现在的变量看起来就像这个'2012-03-17 06:00:00'和'2012-03-18 05:59:00' – pufAmuf 2012-03-17 19:24:50

+1

'$ end = strtotime('today 05:59:59 ')'和'$结束= strtotime('明天05:59:59')'想到。 – Jon 2012-03-17 19:25:57

+0

如果我在凌晨1点看到这个,不会'strtotime('明天05:59:59')'显示3月19日? – pufAmuf 2012-03-17 19:28:31

切碎日期起至该方法可以改进,但原理工作...

<?php 
    date_default_timezone_set('America/New_York'); 
    $date = date('Y-m-d H:i:s', time()); 

    // get adjusted date which subtracts 6 hours 
    $date_adjusted = date('Y-m-d H:i:s', time() - 60 * 60 * 6); 

    // chop off the time (so we are always left with the correct date now) 
    $date_adjusted_date = preg_split("/ /",$date_adjusted); 

    // Add the time element (in this case 6 AM) 
    $correct_date = date('Y-m-d H:i:s', strtotime($date_adjusted_date[0]."T06:00:00")); 

    // check the result 
    echo $correct_date; 
?> 
+0

做手动时间算术总是不是最好的想法,因为如果你碰巧在DST变化边界附近工作,结果会有微妙的差异(在这种情况下,减去6次3600秒会如果刚刚改变或从夏季开始改变,那么这是错误的做法)。为什么不使用DST感知的内置函数呢? – Jon 2012-03-17 19:32:52

+0

你是正确的,你的答案是更好的方式来做到这一点。我投给你,〜) – 2012-03-17 19:37:58

+0

感谢你的贡献以及比利! – pufAmuf 2012-03-17 19:42:52