Я бы попробовал обернуть весь этот кусок кода в функцию, чтобы ваш букмарклет (без экранирования) выглядел так:
(function() {
var d = new Date();
d.setTime(d.getTime()-86400*1000);
window.location =
"https://mail.google.com/mail/?shva=1#search/in%3Ainbox+before%3A" +
d.getFullYear()+"%2F"+(d.getMonth()+1) + "%2F" + d.getDate();
})();
Но это только я. Что еще более важно, эти экранированные символы должны быть экранированы дважды, когда вы превращаете их в форму букмарклета.
javascript:%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20var%20d%20%3D%20new%20Date%28%29%3B%0A%20%20%20%20%20%20%20%20d.setTime%28d.getTime%28%29-86400*1000%29%3B%0A%20%20%20%20%20%20%20%20window.location%20%3D%20%0A%20%20%20%20%20%20%20%20%20%20%22https%3A//mail.google.com/mail/%3Fshva%3D1%23search/in%253Ainbox+before%253A%22%20+%20%0A%20%20%20%20%20%20%20%20%20%20d.getFullYear%28%29+%22%252F%22+%28d.getMonth%28%29+1%29%20+%20%22%252F%22%20+%20d.getDate%28%29%3B%0A%20%20%20%20%7D%29%28%29%3B
Также в экземплярах Date есть функция с именем "getFullYear".