Faits :
A.
A._ est prévenue de blanchiment d'argent et de faux dans les titres dans une procédure P/17122/2016 l'opposant notamment aux frères B.C._ et C.C._. Dans le cadre de cette procédure, la prénommée a été incarcérée à la prison D._ du 17 septembre 2017 au 11 mai 2018.
Le conseil de A._ a consulté pour la première fois le dossier de la procédure le 10 octobre 2017, puis, à tout le moins, les 2 novembre et 18 décembre 2017, les 29 janvier, 8 mars, 15 juin 2018, ainsi que les 1er février, 5 mars et 8 mai 2019.
Le 13 septembre 2018, A._ a déposé plainte contre E._ et F._ pour diffamation, calomnie et, subsidiairement, injure. Elle a expliqué avoir pris connaissance, lors de la consultation du dossier de la procédure pénale P/17122/2016, le 15 juin 2018, d'une dénonciation adressée par l'avocat de B.C._ et C.C._ à différents ministères publics. Cette dénonciation avait été accompagnée d'une attestation, intitulée "Résumé de ma conversation téléphonique avec M. F._ du mardi 9 août 2016", établie par D._ le 2 décembre 2016. A._ considérait que les propos rapportés dans cette attestation étaient attentatoires à son honneur.
B.
Par ordonnance du 17 juin 2019, le Ministère public de la République et canton de Genève a refusé d'entrer en matière sur la plainte du 13 septembre 2018.
C.
Par arrêt du 27 septembre 2019, la Chambre pénale de recours de la Cour de justice genevoise a rejeté le recours formé par A._ contre cette ordonnance.
La cour cantonale a considéré que la plainte déposée par A._ était tardive.
D.
A._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 27 septembre 2019, en concluant, avec suite de frais et dépens, principalement à sa réforme en ce sens que l'ordonnance de non-entrée en matière du 17 juin 2019 est annulée et que l'ouverture d'une instruction contre D._ et F._ est ordonnée. Subsidiairement, elle conclut à son annulation et au renvoi de la cause à l'autorité précédente pour nouvelle décision.

Considérant en droit :
1.
La recourante fonde sa qualité pour recourir au Tribunal fédéral sur l'art. 81 al. 1 let. b ch. 5 LTF. Point n'est besoin d'examiner si l'intéressée peut se prévaloir de cette disposition en l'occurrence, sa qualité pour recourir au Tribunal fédéral devant de toute manière être admise au regard de l'art. 81 al. 1 let. b ch. 6 LTF.
2.
La recourante reproche à la cour cantonale d'avoir violé l'<ref-law>.
2.1. Aux termes de l'<ref-law>, l'<ref-law> est applicable, en ce qui concerne la plainte, en matière de délits contre l'honneur.
Selon l'<ref-law>, le droit de porter plainte se prescrit par trois mois. Le délai court du jour où l'ayant droit a connu l'auteur de l'infraction.
2.2. Déterminer ce qu'une personne a su, voulu, envisagé ou accepté relève du contenu de la pensée, à savoir de faits "internes" qui, en tant que tels, lient le Tribunal fédéral (cf. <ref-law>), à moins qu'ils n'aient été retenus de manière arbitraire (cf. <ref-ruling> consid. 6.3 p. 375).
2.3. Selon l'autorité précédente, la recourante avait indiqué avoir pris connaissance de l'attestation du 2 décembre 2016 le 15 juin 2018. Cette attestation avait été produite au dossier de la procédure P/17122/2016 en annexe à un courrier du 2 février 2017. Or, le conseil de l'intéressée avait eu accès au dossier et en avait obtenu copie la première fois le 10 octobre 2017, puis les 2 novembre et 18 décembre 2017, ainsi que les 29 janvier et 8 mars 2018 à tout le moins. La recourante avait donc eu, nonobstant sa détention, connaissance de la teneur de l'attestation litigieuse bien avant le 15 juin 2018. La plainte du 13 septembre 2018 avait donc été déposée tardivement.
2.4. La recourante se borne à prétendre que l'<ref-law> aurait été violé, en exposant que, selon la jurisprudence du Tribunal fédéral (cf. <ref-ruling> consid. 2.1 p. 98 s.), le délai pour porter plainte ne commence à courir que lorsque le lésé personnellement - et non seulement son conseil - a connu l'auteur de l'infraction.
La recourante n'explique cependant pas en quoi il aurait été arbitraire, pour la cour cantonale, de retenir qu'elle avait pris connaissance de l'attestation litigieuse avant le 15 juin 2018, en se fondant sur les diverses dates auxquelles son conseil avait consulté le dossier - dont il avait levé copie - où se trouvait celle-ci depuis février 2017. Or, il aurait appartenu à la recourante de démontrer - au moyen d'un grief répondant aux exigences de motivation découlant des art. 42 al. 2 et 106 al. 2 LTF - que cette constatation de fait, qui lie le Tribunal fédéral (cf. <ref-law>), était insoutenable.
On ne voit pas, sur la base de l'état de fait de la cour cantonale, que l'<ref-law> aurait pu être enfreint. L'autorité précédente pouvait donc, sans violer le droit fédéral, considérer que le refus d'entrer en matière sur la plainte du 13 septembre 2018 devait être confirmé.
3.
Ce qui précède rend sans objet les griefs de la recourante consacrés au refus d'entrer en matière sur sa plainte, l'autorité précédente n'ayant d'ailleurs aucunement examiné le fond de la cause en raison de la tardiveté de celle-ci.
Il en va de même s'agissant du grief de la recourante relatif à une prétendue violation de son droit d'être entendue par l'autorité précédente. En effet, dès lors que celle-ci a considéré qu'une non-entrée en matière était justifiée en raison de la tardiveté de la plainte déposée, la cour cantonale pouvait - sans violer le droit d'être entendue de la recourante - s'abstenir d'examiner ses arguments tendant à démontrer que des infractions auraient été commises.
4.
Le recours doit être rejeté. La recourante, qui succombe, supporte les frais judiciaires (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 3'000 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux parties et à la Cour de justice de la République et canton de Genève, Chambre pénale de recours.
Lausanne, le 23 décembre 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa