strtotime没有转换正确的一年

时间:2013-12-30 02:29:48

标签: php strtotime

我正在尝试使用pickadate.js使用Laravel 4与PHP混合转换日期。我遇到的问题是当我尝试保存>的日期时2013年。如果我选​​择2014年1月23日,它将保存至2013年1月23日。

这是通过$_POST发送到日期变量的内容。

23 January, 2014

这是我的设置

$date = strtotime($scheduler['date']);

转换为UNIX 1358993640(读取2013年1月23日)

$dateFormat = date('l: F d, Y',$date);

哪个成为:

Wednesday: January 23, 2013 

我可以使用其他功能吗?或者我需要在strtotime之前以另一种方式转换时间吗?它的工作时间与2013年一样长。所以我想,一旦它到达2014年,它也会起作用。

2 个答案:

答案 0 :(得分:6)

假设文本日期是根据固定格式创建的,您可以改为使用DateTime::createFromFormat

$date = DateTime::createFromFormat('d F, Y', $scheduler['date']);
echo $date->format('l: F d, Y');

或者,只需省略逗号:

echo date('l: F d, Y', strtotime('23 January 2014'));

答案 1 :(得分:4)

很奇怪。但找到了解决办法。在运行PHP 5.5的本地设置上进行测试,似乎逗号是造成问题的原因。因此,从输入的数据中删除逗号会产生测试代码所需的结果:

// Set the test data.
$test_data = '23 January, 2014';

// Filter out commas 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('l: F d, Y', $date);  

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

我得到的输出是:

date: 1390453200
dateFormat: Thursday: January 23, 2014