2015-11-28 5 views
2

Я получаю от JSON вывод даты в JSON-шифровании, я хочу его декодировать, когда я вставляю его в mysql.Как декодировать дату JSON с помощью php?

Я вставить вывод:

"date": "/Date(1446739002960)/" 

до $ dateparse переменной

я написать решение, используя JavaScript:

var dateString = "\/Date(753343200000)\/".substr(6); 
var currentTime = new Date(parseInt(dateString)); 
var month = currentTime.getMonth() + 1; 
var day = currentTime.getDate(); 
var year = currentTime.getFullYear(); 
var date = day + "/" + month + "/" + year; 
alert(date); 

Как декодировать переменную содержимое с помощью PHP? спасибо

+0

Вы пробовали 'json_decode ($ yourDate)'? – Bene

+0

не работает друг –

ответ

2

1) Зафиксируйте ваш JSON

$dateJSON ='{"date": "/Date(1446739002960)/"}'

2) Декодирование ваш JSON

$timestamp = json_decode($dateJSON, true);

3) Изъять все числовые символы

$timestamp = preg_replace('/[^0-9]/', '', $timestamp['date'])

4) Преобразование метки времени (разделенное на 1000 причин даты JS) в удобочитаемый формат

$date = date("Y-m-d H:i:s", $timestamp/1000);

+0

$ times = "/ Date (1446739002960) /"; $ timestamp = json_decode ($ times); $ date = date ("Y-m-d H: i: s", $ timestamp); echo $ date; –

+0

Я получаю недействительную дату –

+0

лучше идти с ответом Хассе Бьорка. Вам нужно удалить все нецифровые символы. И, кстати, временная метка ошибочна. Вы получите что-то вроде '47815-05-03 10: 05: 00' – Bene

2

Прежде всего, ваш код JSON не завершен, отсутствуют фигурные скобки, необходимо отфильтровать и передать через json_decode и функции времени:

// Curly brackets where missing 
$obj = json_decode('{"date": "/Date(753343200000)/"}'); 

// Remove non numerical characters 
$obj->date = preg_replace('/[^0-9]/', '', $obj->date); 

// Divide javascript date (in ms) with 1000 to get UNIX date (seconds) 
// Convert the date as DD-MM-YYYY 
$dateparse = date('d/m/Y', ($obj->date/1000)); 
echo $dateparse; 

EDIT Обновленный дату и корректируется на дату JavaScript

Если вы хотите время тоже использовать date('d/m/Y H:i:s', ($obj->date/1000))

+0

работайте хорошо, но даты, которые я получаю после декодирования, являются инвалидами ... попробуйте пожалуйста, 753343200000, это должно быть 15/11/1993 –

+0

, пожалуйста, см. Мой код javascript в вопросе @Hasse –

+0

Хорошо, я изменил формат даты в желаемый формат dd/mm/yyyy и исправлена ​​ошибка при преобразовании даты JS в PHP-дату. JavaScript в миллисекундах и PHP за считанные секунды. –

1

Не забывайте о часовом поясе, как дата JavaScript строка может включать его и здесь, как вы можете разобрать его для оба случая

// Let's assume you did JSON parsing and got your date string 
$date = '/Date(1511431604000+0000)/'; 

// Parse the date to get timestamp and timezone if applicable 
preg_match('/\/Date\(([0-9]+)(\+[0-9]+)?/', $date, $time); 

// remove milliseconds from timestamp 
$ts = $time[1]/1000; 
// Define Time Zone if exists 
$tz = isset($time[2]) ? new DateTimeZone($time[2]) : null; 

// Create a new date object from your timestamp 
// note @ before timestamp 
// and don't specify timezone here as it will be ignored anyway 
$dt = new DateTime('@'.$ts); 

// If you'd like to apply timezone for whatever reason 
if ($tz) { 
    $dt->setTimezone($tz); 
} 

// Print your date 
print $dt->format('Y-m-d H:i:s'); 
Смежные вопросы