Scheduling unpublish too complex for existing modules
Drupal Scheduler will provide the proper infrastructure. Then in a hook_form_FORM_ID_alter(), you can set the date as follows:

global $user;
$roles = $user-&gt;roles;

$plusThreeMonths = date("Y-m-d H:i:s", strtotime("+3 months"));
$form['scheduler_settings']['unpublish_on']['#default_value'] = $plusThreeMonths;
// Disable setting of unpublished date unless admin or user 1
if ($user-&gt;uid != 1 &amp;&amp; !in_array('administrator', $roles)) {
  $form['scheduler_settings']['unpublish_on']['#disabled'] = TRUE;
  $form['field_package_winning_bid']['#disabled'] = TRUE;
}


Then if you need to update the unpublish date, you can use a function similar to the following:

function _republish_node($nid, $time) {
  $node = node_load($nid);
  // Add time to the publish date
  $unpub = date("Y-m-d H:i:s", strtotime($time));  // pass in a string like "+2 weeks"
  $node-&gt;unpublish_on = strtotime($unpub);
  // Set published to true
  $node-&gt;status = 1;
  node_save($node);   // Re-save node with updated status
  scheduler_node_update($node); // update publisher fields  
  // Add watchdog or other method to alert admins (or use rules)
}