webForumDet fria alternativet

Plus en dag till datum i formatet: yyyy-MM-dd HH:mm:ss

JavaScript

5 svar · 651 visningar · startad av kristoffer

Medlem sedan juni 20001 257 inlägg
Frågan#1

Jag vill lägga till en dag till ett datum i formatet: yyyy-MM-dd HH:mm:ss

Exempel:

input:  2007-05-12 23:59:59
output: 2007-05-13 23:59:59

Hur göra?

Medlem sedan dec. 20042 245 inlägg
#2

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;
}
Medlem sedan juni 20001 257 inlägg
#3

Hej, ja, det funkade nästan. Fast funktionen tar inte hänsyn till vilka datum som är giltiga, den skriver till exempel ut 2007-06-31. Vet du varför?

Medlem sedan maj 200737 inlägg
#4

ä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

Medlem sedan juni 20014 421 inlägg
#5

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>
Medlem sedan dec. 20042 245 inlägg
#6

colione skrev:

Javascript börjar räkna månaderna på noll nämligen.

Oops, glömde bort den detaljen... :r :)

309 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
145 ms — deklarationer (db)
0 ms — hämta statistik (cache)
158 ms — hämta tråd, inlägg och bilagor (db)
149 ms — ändringar (db)