You want to use a sectioning command, that will guarantee that no page break will be taken between the diary date and the following text. For instance
\documentclass{article}
\usepackage[pass,showframe]{geometry} % to show the page frame
\usepackage{lipsum}
\makeatletter
\newcounter{diary} % to keep LaTeX happy
\newcommand{\diarymark}[1]{} % ditto
\newcommand\diarydate{%
\@startsection{diary}%
{10}% level for secnumdepth and tocdepth
{\z@}% indentation
{\topsep}% space before
{\topsep}% space below
{\raggedleft\normalfont\itshape}% format of the text
}
\makeatother
\begin{document}
\lipsum[2]
\diarydate{New York, August 1992}
\lipsum[2]
\section{A section}
\diarydate{New York, August 1992}
\lipsum[2]
\section{B section}
\lipsum[2]
\newpage
\diarydate{New York, August 1992}
\lipsum[2]
\end{document}
The space in the case of \section
followed by \diarydate
is the same as the space between a section title and normal text.
If you change the "space before" line into
{-\topsep}% space before
the first line after \diarydate
will not be indented. I used \topsep
as it is the vertical space used by flushright
.
Here are the pictures.
First page

Second page

If you really want to suppress vertical spacing after a heading, you can do it in two steps:
\makeatletter
\newcounter{diary} % to keep LaTeX happy
\newcommand{\diarymark}[1]{} % ditto
\newcommand\@diarydate{%
\@startsection{diary}%
{10}%
{\z@}%
{\topsep}%
{\topsep}%
{\raggedleft\normalfont\itshape}%
}
\newcommand{\diarydate}{%
\par % ensure vertical mode
\if@nobreak % we're after a heading
\vskip-\lastskip % suppress the space added by the heading
\vskip-\topsep % suppress the space added by \@diarydate
\fi
\@diarydate}
\makeatother
and use \diarydate
as before.
\addvspace
space added by\addvspace
is merged, if the section heading adds some and this ads some you get the maximum, not the sum