@9StarRu

Как из foreach исключить или взять последние данные по дате?

В цикле получаю и сохраняю данные в базу mysql так:

$data = json_decode($json, true);

foreach($data['data'] as $date=>$values) {

$date = date("Y-m-d", strtotime($date));
$usd = $values['USD'][0] ?? null;
$usd_two = $values['USD'][1] ?? null;
$usd_three = $values['USD'][2] ?? null;

// сохраняю в базу

$sql = "REPLACE INTO price (name, coin_price, coin_price_2, coin_price_3, p_date)
VALUES ('test', '$usd', '$usd_two', '$usd_three', '$date')";

if ($mysqli->query($sql) === TRUE) {
   echo "Успешно создана новая запись";
} else {
   echo "Ошибка: " . $sql . "<br>" . $mysqli->error;
}

}


По какой-то причине в данных попадаются дубли значений по датам (как минимум один дубль нашел), в результате при получении данных уже из базы mysql, данные не корректы. Они смещаются на день вперед.

Вот пример дубля в json:


"2014-07-09T00:04:00.000Z":{"USD":[625.22143555,10006096,8125377776.3671875]},
"2014-07-09T23:59:00.000Z":{"USD":[624.50933838,9819150,8118683849.859619]},


Как я понял, разница во времени.

Скрипт выше берет оба значения и сохраняет под разными датами, что для меня странно, ведь дата задана переменной $date и в базе на дате стоит UNIQUE KEY (пробовал убирать, не помогло).

В базе сохраняет так:


"2014-07-09T00:04:00.000Z":{"USD":[625.22143555,10006096,8125377776.3671875]},
"2014-07-10T23:59:00.000Z":{"USD":[624.50933838,9819150,8118683849.859619]},


и дальше все данные получаются не корректными, сдвинутыми на день.

Может быть проще на этапе получения данных из json, в $data удалить дублирующиеся даты? Как?

Или что-то не так с
foreach($data['data'] as $date=>$values)

Помогите разобраться и решить мою проблему, пожалуйста.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы берёте даты в UTC, а выводите их в своём часовом поясе.
"2014-07-09T00:04:00.000Z" = "2014-07-09T03:04:00.000+03:00"
"2014-07-09T23:59:00.000Z" = "2014-07-10T02:59:00.000+03:00"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы