如何在php中将日期和时间转换为时间戳?

如何在php中将日期和时间转换为时间戳?,php,date,datetime,timestamp,mktime,Php,Date,Datetime,Timestamp,Mktime,我有一个日期'07/23/2009'和一个时间'18:11',我想从中得到一个时间戳: 以下是我的例子: date_default_timezone_set('UTC'); $d = str_replace('/', ', ', '07/23/2009'); $t = str_replace(':', ', ', '18:11'); $date = $t.', 0, '.$d; echo $date; echo '<br>'; echo $x = mktime("$date");

我有一个日期
'07/23/2009'
和一个时间
'18:11'
,我想从中得到一个时间戳: 以下是我的例子:

date_default_timezone_set('UTC');

$d = str_replace('/', ', ', '07/23/2009');
$t = str_replace(':', ', ', '18:11');
$date = $t.', 0, '.$d;
echo $date;
echo '<br>';
echo $x = mktime("$date");
date\u default\u timezone\u set('UTC');
$d=str_替换(“/”、“、”、“07/23/2009”);
$t=str_replace(“:”、“,”、“,”18:11”);
$date=$t',0',.$d;
echo$日期;
回声“
”; echo$x=mktime($date);
问题是,
$x
给了我当前的时间戳

有什么想法吗?

试试使用strotime

$x = strtotime($date." ".$time);
对于您的情况,您的代码应该是

date_default_timezone_set('UTC');
$x = strtotime("07/23/2009 18:11");
echo $x;

它给出错误,因为mktime函数只需要所有数值,而该函数只给出日期。如果你想

$h = 18;
$i = 11;
$s = 00;
$m = 07;
$d =23;
$y = 2009;
echo date("h-i-s-M-d-Y",mktime($h,$i,$s,$m,$d,$y));
那就行了

因此,您的完整代码将

date_default_timezone_set('UTC');

$d = str_replace('/', ',', '07/23/2009');
$t = str_replace(':', ',', '18:11');
$date = $t.',0,'.$d;
$fulldate = explode(',',$date);
echo '<br>';
$h = $fulldate[0];
$i = $fulldate[1];
$s = $fulldate[2];
$m = $fulldate[3];
$d =$fulldate[4];
$y = $fulldate[5];

echo date("h-i-s-M-d-Y",mktime($h,$i,$s,$m,$d,$y)) . "<br>";
谢谢

使用本课程:-

或:-


重要提示:

$newTimezone = new DateTime($day);
$newTimezone->setTimezone(new DateTimeZone($timezone)); 
$newTimezone = new DateTime($day, new DateTimeZone($timezone));
除了上面的答案之外,还有一件重要的事情必须遵循

始终使用:

$newTimezone = new DateTime($day);
$newTimezone->setTimezone(new DateTimeZone($timezone)); 
$newTimezone = new DateTime($day, new DateTimeZone($timezone));
不要使用:

$newTimezone = new DateTime($day);
$newTimezone->setTimezone(new DateTimeZone($timezone)); 
$newTimezone = new DateTime($day, new DateTimeZone($timezone));
原因:(不同的输出,请检查以下内容)

带有($day,$timezone)的函数{
$newTimezone=新日期时间($day);
$newTimezone->setTimezone(newdatetimezone($timezone));
$timestamp=$newTimezone->format('U');
返回$timestamp;
}    
不带($day,$timezone)的函数{
$newTimezone=newdatetime($day,newdatetimezone($timezone));
$timestamp=$newTimezone->format('U');
返回$timestamp;
}   
$明天=日期('Y-m-d h:i:s A',标准时间('-1秒',标准时间('明天午夜'));
$Dayed=日期('Y-m-d h:i:s A',标准时间('24小时1秒',标准时间('昨天午夜'));
$timezone='UTC';
回音“与昨天:”。与($昨天,$timezone)。“
”; $now=新的日期时间('@'。带有($昨天,$timezone)); $now->setTimezone(新的DateTimeZone(date\u default\u timezone\u get()); 回显“昨天可读:”.$now->format('m/d/Y h:i:s A')。-------------.date('m/d/Y h:i:s A')。

; 回声“没有昨天:”。没有($昨天,$timezone)。“
”; $now=新日期时间('@'。不带($昨天,$timezone)); $now->setTimezone(新的DateTimeZone(date\u default\u timezone\u get()); 回显“昨天可读:”.$now->format('m/d/Y h:i:s A')。-------------.date('m/d/Y h:i:s A')。

; 回音“与明天:”。与($明天,$timezone)。“
”; $now=新的日期时间('@'。带($MOTORY,$timezone)); $now->setTimezone(新的DateTimeZone(date\u default\u timezone\u get()); 回显“昨天可读:”.$now->format('m/d/Y h:i:s A')。-------------.date('m/d/Y h:i:s A')。

; 回声“没有明天:”。没有($明天,$timezone)。“
”; $now=新日期时间('@'。不带($MOTORY,$timezone)); $now->setTimezone(新的DateTimeZone(date\u default\u timezone\u get()); 回显“昨天可读:”.$now->format('m/d/Y h:i:s A')。-------------.date('m/d/Y h:i:s A')。

输出:

$newTimezone = new DateTime($day);
$newTimezone->setTimezone(new DateTimeZone($timezone)); 
$newTimezone = new DateTime($day, new DateTimeZone($timezone));
与昨日比较:1537642801

昨天可读:2018年9月23日12:00:01上午----2018年9月23日10:05:55下午

没有昨天:1537660801

与昨天一起阅读:2018年9月23日05:00:01上午----2018年9月23日10:05:55下午

明日:1537729199

昨天可读:2018年9月23日11:59:59下午----2018年9月23日10:05:55下午

没有明天:1537747199

昨天可读:2018年9月24日04:59:59上午----2018年9月23日10:05:55下午


这可能会导致日期为2009年6月7日18:11的问题-是7月7日还是6月6日?。原因是并非所有人(事实上只有少数国家)都使用MM/DD/YYYY格式作为日期,大多数使用DD/MM/YYYY格式。始终最好以YYYY-MM-DD格式存储日期。strotime对日期的解释方式(至少在我的语言环境中)是,如果您使用
/
作为分隔符,则为m/d/y如果您使用
则为d.m.y,如果您使用
-
则为y-m-d。但我同意Y-m-d是首选(iso 8601)。您的代码中有一点错误。请参阅下面我的答案!