Set a specific changed date for a node I am creating nodes programatically based on the feed from an external api. I have managed to create all nodes, assign field values and also set the created date. Now my problem is that I also need to set the changed date of each node to match the value returned from the feed. I have tried to set this value before saving the node without any success:

// $data contains the release information used to create and populate the node
$node = new stdClass();
$node-&gt;title = $data-&gt;Release-&gt;Title;
$node-&gt;type = 'release';
node_object_prepare($node);
$node-&gt;status = NODE_PUBLISHED;
$node-&gt;uid = 1;
$node-&gt;language = LANGUAGE_NONE;

// handle any field data - not really important
handleFields($node, $data);

// submit the node
$node = node_submit($node);

$node-&gt;created = strtotime($data-&gt;Release-&gt;PublishDate);
// here I'm trying to set the changed value for the node
$node-&gt;changed = strtotime($data-&gt;Release-&gt;LastChangeDate);

// finally save the node
node_save($node);


Would be nice if anyone have a solution to this problem. Perhaps I can make a raw query against the database in order to update the changed date of the node?
The reason I need to set this value is because later on it will be used to compare against the modification date of a release in the feed so I can decide if the node needs to be updated or not. I know I could use a custom field for this purpose, storing the releases modification time and then compare against this value instead of the changed column in the node table.
The code you are using doesn't work as expected because you are first setting $node-&gt;changed, and then calling node_save(), which then unconditionally sets its value.

The code it uses is the following one.

// Set the timestamp fields.
if (empty($node-&gt;created)) {
  $node-&gt;created = REQUEST_TIME;
}
// The changed timestamp is always updated for bookkeeping purposes,
// for example: revisions, searching, etc.
$node-&gt;changed = REQUEST_TIME;

$node-&gt;timestamp = REQUEST_TIME;
$update_node = TRUE;

// Let modules modify the node before it is saved to the database.
module_invoke_all('node_presave', $node);
module_invoke_all('entity_presave', $node, 'node');


If you want to set $node-&gt;changed, you would need to implement hook_node_presave(), which is invoked right after node_save() sets 
$node-&gt;changed.
For example, in the code you are showing, I would add $node-&gt;release_change_date = strtotime($data-&gt;Release-&gt;LastChangeDate);; your implementation of hook_node_presave() would then use $node-&gt;release_change_date to set $node-&gt;changed ($node-&gt;changed = $node-&gt;release_change_date).