Я не совсем уверен, как мне назвать этот вопрос, но я постараюсь объяснить мою проблему. На данный момент у меня есть массив в PHP с некоторыми записями.
Array
(
[0] => stdClass Object
(
[sender_id] => 0
[message] => Test
[created_at] => 2020-03-12 16:26:23
)
[1] => stdClass Object
(
[sender_id] => 0
[message] => Hello
[created_at] => 2020-03-12 13:47:47
)
)
Мне нужен был способ сгруппировать каждую запись по дате create_at, чтобы мой результат выглядел так:
Array
(
[2020-03-12] => Array
(
[0] => stdClass Object
(
[sender_id] => 0
[message] => Test
[created_at] => 2020-03-12 16:26:23
)
[1] => stdClass Object
(
[sender_id] => 0
[message] => Hello
[created_at] => 2020-03-12 13:47:47
)
)
)
Чтобы достичь этого, я сделал это в PHP:
$grouped = [];
foreach ( $messages as $message ) {
$created_at_date = date( 'Y-m-d', strtotime( $message->created_at ) );
$grouped[ $created_at_date ][] = $message;
}
Но теперь у меня возникла проблема, поэтому я решил выполнить эту задачу в JS. Итак, сначала я закодировал массив в PHP и установил его в переменную внутри тега <script>
:
<script>
let messages = <?= ! empty( $messages ) ? json_encode( $messages ) : '[]' ?>;
</script>
Теперь у меня много сообщений, но они еще не сгруппированы. Поскольку мне нужно соблюдать часовой пояс, я могу сгруппировать их только в JS, где я знаю часовой пояс клиентов. Я уже сделал это с часовым поясом, но теперь не могу сгруппировать сообщения, как в PHP. Вот что я попробовал:
let messages = [ {
sender_id: "0",
message: "Test",
created_at: "Thu Mar 12 2020 17:26:23 GMT+0100 (Mitteleuropäische Normalzeit)"
}, {
sender_id: "0",
message: "Hallo",
created_at: "Thu Mar 12 2020 17:26:23 GMT+0100 (Mitteleuropäische Normalzeit)"
} ];
let groupedMessages = [];
jQuery( messages ).each( function ( index, message ) {
let createdAtDate = new Date( message["created_at"] ).toLocaleDateString( navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
} );
groupedMessages[createdAtDate][] = message;
} );
console.log( groupedMessages );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>