If I understand your question correctly, you want
l1 = {{date1, value1}, {date1, value2}, {date2, value3}, {date4, value4}} l2 = {{date3, value5}, {date4, value5}, {date5, value6}}
To become
l1 = {{date1, value1}, {date1, value2}, {date2, value3}, {date3, 0}, {date4, value4}, {date5,0}} l2 = {{date1, 0}, {date2, 0}, {date3, value5}, {date4, value5}, {date5, value6}}
If so, maybe something like this:
If[MemberQ[l1[[All,1]],#],Cases[l1,{#,_}],{#,0}]& /@ Union[l1[[All,1]],l2[[All,2]] ]
Depending on how you need to process multiple data points on the same date in a given series, you may need to precede the Cases [] function with the Sequence @@ or First @ command, for example
If[MemberQ[l1[[All,1]],#],Sequence @@ Cases[l1,{#,_}],{#,0}]& /@ Union[l1[[All,1]],l2[[All,1]] ]
Now I'm at home, so this one was checked for syntax errors :-)