  Modern applications often manage time-varying data. Despite decades of
research on temporal databases, which culminated in the addition of temporal
data operations into the SQL:2011 standard, temporal data query and
manipulation operations are unavailable in most mainstream database management
systems, leaving developers with the unenviable task of implementing such
functionality from scratch. In this paper, we extend \emph{language-integrated
query} to support writing temporal queries and updates in a uniform host
language, with the language performing the required rewriting to emulate
temporal capabilities automatically on any standard relational database. We
introduce two core languages, $\lambda_{\mathsf{TLINQ}}$ and
$\lambda_{\mathsf{VLINQ}}$, for manipulating transaction time and valid time
data respectively, and formalise existing implementation strategies by giving
provably correct semantics-preserving translations into a non-temporal core
language, $\lambda_{\mathsf{LINQ}}$. We show how existing work on query
normalisation supports a surprisingly simple implementation strategy for
\emph{sequenced joins}. We implement our approach in the Links programming
language, and describe a non-trivial case study based on curating COVID-19
statistics.
