Your \maps only sets keyword=before2013 if year is 1997 up to 2012 but not if date is 1997-01-01 up to 2012-12-31. The index is only printed if keyword=before2013. So the entry would not be printed, if date instead of year is used.
You can add a similar map for date like you have for year:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@THESIS{a,
AUTHOR = {Myself},
TITLE = {Me, myself and I},
Institution = {My University},
type = {Ph.D. thesis},
year = {2010}
}
@THESIS{b,
AUTHOR = {Another},
TITLE = {Another, one and nobody},
Institution = {My University},
type = {Ph.D. thesis},
date = {2010-11-25}
}
@THESIS{c,
AUTHOR= {Never},
TITLE = {I'm to late},
Institution = {My University},
type = {Ph.D. thesis},
date = {2017-01-01}
}
\end{filecontents*}
\usepackage[backend=biber,defernumbers=true,sorting=ydnt]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=year, match=\regexp{199([7-9])|200([0-9])|201([0-2])},final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, fieldvalue={before2013}, append]
}
\map[overwrite=true]{
\step[fieldsource=date, match=\regexp{199([7-9])|200([0-9])|201([0-2])},final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, fieldvalue={before2013}, append]
}
}
}
\begin{document}
Hello world.
\nocite{*}
\printbibliography[type=thesis,keyword=before2013,title=Thesis,resetnumbers=true]
\end{document}

Another solution would be to use a check, because checks are done, when the date already has been splitted:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@THESIS{a,
AUTHOR = {Myself},
TITLE = {Me, myself and I},
Institution = {My University},
type = {Ph.D. thesis},
year = {2010}
}
@THESIS{b,
AUTHOR = {Another},
TITLE = {Another, one and nobody},
Institution = {My University},
type = {Ph.D. thesis},
date = {2010-11-25}
}
@THESIS{c,
AUTHOR= {Never},
TITLE = {I'm to late},
Institution = {My University},
type = {Ph.D. thesis},
date = {2017-01-01}
}
\end{filecontents*}
\usepackage[backend=biber,defernumbers=true,sorting=ydnt]{biblatex}
\addbibresource{\jobname.bib}
\defbibcheck{before2013}{%
\iffieldint{year}% If an interger field year exists
{
\ifnumless{\thefield{year}}{2013}% and the field value is less than 2013
{}% do nothing
{\skipentry}% otherwise skip the entry
}
{\skipentry}% skip the entrie also if there isn't an integer field year
}
\begin{document}
Hello world.
\nocite{*}
\printbibliography[type=thesis,check=before2013,title=Thesis,resetnumbers=true]
\end{document}
The result is the same.
Why is not it the case?
– rasha Jan 27 '17 at 10:21datefield is split into its components. This is desirable in most situations because then one can modify the raw input and does not have to worry about how Biber processes certain fields. – moewe Jan 27 '17 at 11:22