使用“关闭”关闭PHP strotime()函数;2013年1月1日“;

使用“关闭”关闭PHP strotime()函数;2013年1月1日“;,php,mysql,string,time,Php,Mysql,String,Time,我正在从注册表中收集一个用户的生日信息,并希望在将其存储到数据库之前使用strotime将其转换为时间戳,但这并不顺利 我让他们在3个选择框中选择日期,一个是日期,另一个是月份,最后是年份,然后我将它们输入到strottime。问题是,我正在为前面列出的变量输入“1”、“1月”和“2013”,并将它们输入到strotime,如下所示: $user->birthday = strtotime($input['bday'].'-'.$input['bmonth'].'-'.$input['by

我正在从注册表中收集一个用户的生日信息,并希望在将其存储到数据库之前使用strotime将其转换为时间戳,但这并不顺利

我让他们在3个选择框中选择日期,一个是日期,另一个是月份,最后是年份,然后我将它们输入到strottime。问题是,我正在为前面列出的变量输入“1”、“1月”和“2013”,并将它们输入到strotime,如下所示:

$user->birthday = strtotime($input['bday'].'-'.$input['bmonth'].'-'.$input['byear']);
当回音为“2013年1月1日”时,它会显示为“2012年12月31日”,但使用:


我一直在大量测试不同的方法,但无法让它发挥作用。我非常感谢您的帮助。

不太确定您的代码是如何失败的,但这对我来说是可行的:

// Set the test data.
$test_data = '1-January-2013';

// Get the Unix datetime from the test data.
$date = strtotime($test_data);

// Format the Unix datetime.
$dateFormat = date("M d, Y", $date);  

// Output for debugging.
echo 'test_data: ' . $date . '<br />';
echo 'date: ' . $date . '<br />';
echo 'dateFormat: ' . $dateFormat . '<br />';
但是,如果那些
-
破折号有可能让人窒息,请尝试以下方法:

// Set the test data.
$test_data = '1-January-2013';

// Filter out dashes from the '$test_data'
$test_data = preg_replace('/-/', ' ', $test_data);

// Get the Unix datetime from the test data.
$date = strtotime($test_data);

// Format the Unix datetime.
$dateFormat = date("M d, Y", $date);  

// Output for debugging.
echo 'test_data: ' . $date . '<br />';
echo 'date: ' . $date . '<br />';
echo 'dateFormat: ' . $dateFormat . '<br />';

您是在调用strotime()之前还是之后设置date\u default\u timezone\u set()?由于默认时区是UTC,LA是UTC-08.00,这可能是造成差异的原因。

在调用
strotime
之前,您必须调用
date\u default\u timezone\u set
,以便在解析输入日期和显示日期时具有相同的时区。

这肯定是一个时区问题。1356998400是UTC 12:00:00am时的01/01/13,因此执行此操作时:

date_default_timezone_set("America/Los_Angeles");
echo date("M d, Y", 1356998400);

Unix时间1356998400是2012年12月31日在洛杉矶!我怀疑您是在UTC中获取时间戳,然后用PST输出。

在调用
strotime
之前是否调用了
date\u default\u timezone\u set
?我相信我的框架设置了这一点。它被设置为UTC。所以你在UTC中处理输入日期,然后在洛杉矶时间中回显它。格林威治的1月1日,洛杉矶的12月31日。噢,拍…*脸掌*…天哪…谢谢。你有这个时间戳吗?也许是我的环境。。。“1356998400”为我
回音日期(strotime(“1”)-“2013年1月”)
给出了
1356994800
1356994800
1357016400
之间的差异基于本地时区。但正如你们所看到的,我的代码按预期工作。但当我刚刚检查所有时间戳时,它们都是2013年1月1日的结果。好吧,伙计们,对不起,正如Barmar在顶部所说的,这是因为我在UTC输入,在PST-8输出。我的错。很抱歉应在评论中提出问题。我知道,你还没有足够的代表发表评论。但是我已经问过这个问题了,所以你不必问。是的,正是这个问题,谢谢。不幸的是,巴尔马先解决了这个问题,否则我会接受的。谢谢巴尔马,对不起这个愚蠢的问题。是的,事情就是这样。再次感谢。不幸的是,巴尔马先得到了答案,所以我会接受他的回答。
// Set the test data.
$test_data = '1-January-2013';

// Filter out dashes from the '$test_data'
$test_data = preg_replace('/-/', ' ', $test_data);

// Get the Unix datetime from the test data.
$date = strtotime($test_data);

// Format the Unix datetime.
$dateFormat = date("M d, Y", $date);  

// Output for debugging.
echo 'test_data: ' . $date . '<br />';
echo 'date: ' . $date . '<br />';
echo 'dateFormat: ' . $dateFormat . '<br />';
test_data: 1357016400
date: 1357016400
dateFormat: Jan 01, 2013
date_default_timezone_set("America/Los_Angeles");
echo date("M d, Y", 1356998400);