我的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吗?
谢谢
答案 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
以获取秒时间戳。