如何在PHP中将字符串转换为日期或日期时间

时间:2014-06-18 21:33:46

标签: php json date datetime

我的PHP脚本正在接收“/ Date(1403071826510)/”作为JSON日期。如何将其转换为PHP Date或DateTime?

这就是我在做的事情:

$milliseconds = (int) preg_replace("/[^0-9 ]/", '', $strDate);
return json_encode(Date('d/m/Y h:m',$milliseconds/1000));

但我的演员正在返回2147483647而不是1403071826510,因为我的操作系统是32位。

知道如何从收到的字符串中获取Date或DateTime吗?

谢谢

3 个答案:

答案 0 :(得分:3)

在转换之前剥去毫秒。由于它是一个字符串,您只需使用substr()删除最后3位数字,然后转换为int

$js_timeval = '1403071826510';
$php_timeval = (int)substr($js_timeval, 0, -3); // 1403071826
echo date('r', $php_timeval);

Wed, 18 Jun 2014 00:10:26 -0600

答案 1 :(得分:2)

这里真的没有必要使用正则表达式。您只需从字符串中间提取秒数并使用:

$sec =substr("/Date(1403071826510)/", 6, 10);
$dt = date("Y-m-d H:i:s",$sec);                // 2014-06-18 06:10:26

注意@zamnuts评论这是一个处理早期日期的正则表达式版本:

preg_match('#Date\(([0-9]{0,10}?)([0-9]{1,3}\))#',"/Date(1403071826510)/",$matches);
$dt = date("Y-m-d H:i:s", $matches[1]);

答案 2 :(得分:1)

Marc B的答案很好(+1),但为了完整性(因为我已经完成了工作),我正在考虑使用必须安装的BC Math extension for PHP,而不是包含在默认情况下BC Math允许PHP使用任意大数。

请考虑以下事项:

$input = '/Date(1403071826510)/';

$ms = preg_replace('/[^0-9 ]/','',$input);
var_dump($ms); // string '1403071826510' (length=13)

$sec = bcdiv($ms,'1000');
var_dump($sec); // string '1403071826' (length=10)

$date = Date('d/m/Y h:m',$sec);
var_dump($date); // string '17/06/2014 11:06' (length=16)

所有转化均使用String'1000' Divide the parsed milliseconds using bcdiv并将其传递到Date以获取秒时间戳。