Tja, vet inte om det finns snyggare sätt, men det här verkar funka:
function addADay(input) {
var re = /^(....)\-(..)\-(..)(.*)$/;
var arr = re.exec(input);
var year = arr[1];
var month = arr[2];
var date = arr[3];
var d = new Date(year, month, date);
d -= -86400000;
d = new Date(d);
year = d.getFullYear();
month = d.getMonth();
if (month <= 9)
month = "0" + month;
date = d.getDate();
var output = year + "-" + month + "-" + date + arr[4];
return output;
}
är ingen fena på javascript men borde man inte kunna lösa det enkelt genom att:
1. Konvertera till tidsenheten antal millisekunder från 1970(eller när det nu är, det man brukar få som output vid tidshantering)
2. adda x antal millisekunder motsvarande 1 dag
3. konvertera tillbaka till lokal tid.
kanske är bökigt men kändes som en möjlig lösning :) överlåter själva kodningen till de som faktiskt kan javascript :)
edit: oops, det var nog något i den stilen du gjorde.. my bad
2007-06-31 är ett giltigt datum. ;) Javascript börjar räkna månaderna på noll nämligen. För att få det att vara ett giltigt datum för människan man måste man ta bort ett från månaden när den matas in och sedan addera ett när månaden matas ut.
zcorpans funktion lite omskriven:
<script>
function addADay(input) {
var re = /^(....)\-(..)\-(..)(.*)$/;
re.exec(input);
var year = RegExp.$1;
var month = RegExp.$2;
var date = RegExp.$3;
var time = RegExp.$4
var d = new Date(new Date(year, month-1, date).getTime()+(24*60*60*1000));
return d.getFullYear()+"-"+(((d.getMonth()+1)<=9)?"0"+(d.getMonth()+1):d.getMonth()+1)+"-"+((d.getDate()<=9)?"0"+d.getDate():d.getDate())+" "+time
}
alert(addADay("2007-12-31 23:59:59"))
</script>