Hi Tim.
In that case, the new level will be charged and applied immediately. The user gets the new level access right after the payment.
s2Member doesn’t take into account the paid time left from the previous level. It won’t be discounted from the new payment, or time added to the access for it.
That’s called proration, and custom code has been written in the past by site owners to implement the kind they need for their use.
Here’s an example I wrote some months ago for someone:
// Proration for level 1 subscription upgrade to level 2 subscription.
if (current_user_is('s2member_level1') {
$level1_price = 50; // Your level 1 price.
$level1_days = 365; // Your level 1 term in days.
$level1_day_price = $level1_price / $level1_days;
$level2_price = 80; // Your level 2 price.
$user_eot_npt = s2member_eot(); // https://s2member.com/kb-article/s2eot-shortcode-documentation/#toc-e00e3e46
$user_days_left = ceil(($user_eot_npt['time'] - time()) / DAY_IN_SECONDS);
$user_credit = ceil($user_days_left * level1_day_price);
$level2_1st_pay = $level2_price - $user_credit;
// Now configure your Shortcode with trial term same as regular term, but trial amount with what you calculated above.
// The Shortcode here has been abbreviated for clarity in this regard.
echo do_shortcode('[s2Member-Pro-PayPal-Form ... ta="'.$level2_1st_pay.'" ... /]');
}
s2 doesn’t have a proration logic or mechanism included, but it’s something that I’ve wanted to make possible and may include in the future.
I’m adding your vote for this feature.