Duterte made the announcement in his first "State of the Nation Address" to Congress as he laid the groundwork for peace talks with the communists that are due to begin in Norway next month.
"To stop violence on the ground (and) restore peace, I am now announcing a unilateral ceasefire," Duterte told lawmakers, as he called on the rebels to do the same.
The communist rebellion has killed about 30,000 people since the 1960s.
The communists' armed wing, the New People's Army, is believed to have fewer than 4,000 gunmen today, down from a peak of 26,000 in the 1980s, according to the military.
More From This Section
Dutere's predecessor, Benigno Aquino, revived negotiations soon after taking office in 2010 but shelved them in 2013, accusing the rebels of being insincere about finding a political settlement.
The talks collapsed after his government rejected the rebels' demand to release scores of their jailed comrades, whom they described as "political prisoners".
Duterte, who took office on June 30 and counts exiled communist rebel leader Jose Maria Sison as a friend, had previously offered to release some political prisoners.