Before I Fall
(2017)

Pooper:
Samantha breaks the time loop by sacrificing her own life to save Juliet's (and learns to be a nicer, more-genuine person in the meantime).

Long Ending:
Samantha Kingston (Zoey Deutch) is in the popular clique at her school, along with her friends Lindsay, Ally, and Elodie. Samantha is very dismissive of her parents (mother played by Jennifer Beals) and little sister. She wakes up excited to go to school for "Cupid Day," where boys send roses to girls (and the number of roses received are a symbol of prestige). She also plans to lose her virginity to her hot but shallow boyfriend that night.

Samantha gets a bunch of roses from her boyfriend, but also a single very expensive rose from her childhood friend Kent (who she no longer hangs out with). Kent invites her to a big party he is throwing that night. She and her friends go to lunch where they make fun of both a lesbian student and a strangely dressed girl named Juliet. Later, the foursome go to the party at Kent's house. Samantha blows Kent off, but is also dismayed to find her boyfriend drunk and flirting with other girls. Juliet shows up at the party and gets into a fight with Lindsay. The fight ends when Lindsay pours a drink on Juliet's head and all the others at the party follow suit until Juliet flees from the house in tears. Samantha and friends then leave the party and hit something on the drive home, causing the car to flip over and kill everyone inside....

Samantha then wakes up again on Cupid Day. She soon discovers that she is in a time loop, constantly repeating Cupid Day over and over. At first, she gets angry and acts out. She fights with Lindsay, Ally, and Elodie, has sex with a drunken Rob, wears provocative clothing, and even hits on her teacher. But no matter what she does, she keeps waking up on the same day (even if she takes actions to avoid her death).

On one Cupid Day, Samantha talks honestly with the lesbian student and learns to be more open-minded and generous. She spends subsequent days bonding with her sister and her parents. She also realizes that Kent is a really nice guy and develops feelings for him. One Cupid Day, she finally speaks with Juliet. She learns that Juliet was once best friends with Lindsay, and that Juliet supported Lindsay through her parent's divorce. As a result of the stress from her parents' divorce, Juliet witnessed Lindsay wet her bed during a sleepover. Angry, and as a defense mechanism, Lindsay spread rumors that Juliet was a bed wetter and with her friends, has been bullying Juliet ever since. Samantha then watches as Juliet runs into the road to commit suicide. Samantha sees Lindsay's car hit Juliet and roll over. It is Juliet's suicide that caused the car accident killing Samantha and her friends. With this knowledge, Samantha narrates that she now knows what she has to do.

The next day, she wakes up and has a loving breakfast with her family. At school, she tells Lindsay, Elodie, and Ally that they have been great friends and tells them to highlight the good parts of their personalities. She publicly breaks up with her boyfriend, exposing him as a jerk in front of the school. Samantha talks with Lindsay about her parents' divorce to help provide Lindsay with some closure. She then goes to Kent's party, makes out with him, and tells Kent she loves him. Samantha then confronts Juliet when Juliet walks into the party to confront Lindsay and apologizes for everything. Juliet is taken aback by Samantha's words and flees towards the road with Samantha in hot pursuit. Despite Samantha's best efforts to make amends, Juliet says it's too late and jumps into the road in front of an oncoming truck. Samantha pushes Juliet out of the way (saving her life), but is fatally struck in the process. A weeping Juliet cradles Samantha's body and says "thank you for saving my life." Samantha (in voice-over) says "No. Thank you for saving mine." Credits roll. 

Thanks Evan B!