PHP: risolvere l'incompatibilità tra i timestamp Unix di JavaScript e quelli usati da PHP in MongoDB

Short link

Esiste un'incompatibilità tra i timestamp Unix generati da JavaScript e quelli usati da PHP con MongoDB.

L'incompatibilità tra i timestamp risiede nel fatto che i timestamp Unix generati da JavaScript vanno divisi per 1000 tenendo presente quindi i millesimi di secondo.


function my_parse_json_data($file) {
    $data = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/data/' . $file);
    $json_data = json_decode($data, true);
    foreach($json_data as &$json_datum) {
        $json_datum['date'] = new MongoDB\BSON\UTCDateTime($json_datum['date'] / 1000);
    }
    return $json_data;
}

Una volta normalizzati i timestamp possono essere usati in PHP con MongoDB:


use MongoDB\Driver\Exception\Exception;
use MongoDB\Driver\Manager;

$data = my_parse_json_data('import.json');

try {
    $manager = new MongoDB\Driver\Manager('mongodb://username:password@127.0.0.1/data');
    $bulk = new MongoDB\Driver\BulkWrite;
    foreach($data as $entry) {
        $bulk->insert($entry);
    }
    $manager->executeBulkWrite('data.import', $bulk);
               
} catch (MongoDB\Driver\Exception\Exception $e) {
    echo $e->getMessage();
}