alle 2 wochen

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    alle 2 wochen

    Hallo liebes VB-Paradise,
    ich habe ein kleines Problem den ich schaffe es einfach nicht folgenden code zum laufen zu bringen :

    PHP-Quellcode

    1. function repeat($type, $start, $end) { //type=daily/weekly/2weekly/monthly_date/monthly_day/quarterly_date/quarterly_day - $start=yyyy-mm-dd hh-mm-ss - $end=yyyy-mm-dd hh-mm-ss/xx
    2. $start_ts=strtotime($start);
    3. if ($type=="daily" || $type=="weekly" || $type=="2weekly") {
    4. switch ($type) {
    5. case "daily": $diff = "86400"; break;
    6. case "weekly": $diff = "604800"; break;
    7. case "2weekly": $diff = "1209600"; break;
    8. }
    9. $a[0]=$start;
    10. if (ereg("-", $end)) {
    11. $end_ts = strtotime($end);
    12. $anz=intval(($end_ts-$start_ts)/$diff);
    13. } else $anz = $end;
    14. for($i=1;$i<=$anz;$i++) {
    15. $a[$i]=date("Y-m-d",$start_ts+$i*$diff);
    16. }
    17. } elseif ($type=="monthly_date" || $type=="monthly_day" || $type=="quarterly_date" || $type=="quarterly_day") {
    18. if (ereg("-", $end)) $end = strtotime($end);
    19. else $end = $end+1;
    20. $a[0] = $start;
    21. $i = 1;
    22. while ($temp<$end) {
    23. switch ($type) {
    24. case "monthly_date":
    25. $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    26. break;
    27. case "monthly_day":
    28. if (!($i%3)) $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+35, date("Y", $start_ts));
    29. else $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+28, date("Y", $start_ts));
    30. break;
    31. case "quarterly_date":
    32. $temp = mktime(0, 0, 0, date("m", $start_ts)+3, date("d", $start_ts), date("Y", $start_ts));
    33. break;
    34. case "quarterly_day":
    35. $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+91, date("Y", $start_ts));
    36. break;
    37. default: $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    38. }
    39. $start_ts = $temp;
    40. $a[$i] = date("Y-m-d", $temp);
    41. $i++;
    42. if (strlen($end)<=3) $temp = $i;
    43. }
    44. } else die("<span style='font-weight: bold; font-size: 12px; font-face: tahoma; color: red'>Error in function: repeat()</span>");
    45. return $a;
    46. }


    mein Aufruf sieht so aus :

    PHP-Quellcode

    1. $LOLa=repeat("2weekly","2014-02-21 20-17-40","2015-08-21 20-17-46");


    was mache ich falsch ?

    MFG BlacknetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Hi,

    Fehlermeldung, irgendwas? Vielleicht mal display_errors einschalten und error_reporting auf E_ALL und nochmal probieren. Ein Ansatz wäre gut, bevor ich mich jetzt durch den ganzen Code durchlese.


    //EDIT:
    Hab mal bissl aufgeräumt:

    PHP-Quellcode

    1. <?php
    2. function repeat($type, $start, $end) {
    3. $start_ts = strtotime($start);
    4. $a = "";
    5. if($type == "daily" || $type == "weekly" || $type == "2weekly") {
    6. switch ($type) {
    7. case "daily": $diff = "86400"; break;
    8. case "weekly": $diff = "604800"; break;
    9. case "2weekly": $diff = "1209600"; break;
    10. }
    11. $a[0] = $start;
    12. $anz = 0;
    13. if (preg_match("/\-/", $end)) {
    14. $end_ts = strtotime($end);
    15. $anz=intval(($end_ts-$start_ts)/$diff);
    16. }else{
    17. $anz = $end;
    18. }
    19. for($i=1; $i <= $anz; $i++){
    20. $a[$i] = date("Y-m-d", $start_ts + $i * $diff);
    21. }
    22. }elseif($type == "monthly_date" || $type == "monthly_day" || $type == "quarterly_date" || $type == "quarterly_day") {
    23. if(preg_match("/\-/", $end)){
    24. $end = strtotime($end);
    25. }else{
    26. $end++;
    27. }
    28. $a[0] = $start;
    29. $i = 1;
    30. while($temp < $end) {
    31. switch ($type) {
    32. case "monthly_date":
    33. $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    34. break;
    35. case "monthly_day":
    36. if (!($i%3)) $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+35, date("Y", $start_ts));
    37. else $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+28, date("Y", $start_ts));
    38. break;
    39. case "quarterly_date":
    40. $temp = mktime(0, 0, 0, date("m", $start_ts)+3, date("d", $start_ts), date("Y", $start_ts));
    41. break;
    42. case "quarterly_day":
    43. $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+91, date("Y", $start_ts));
    44. break;
    45. default: $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    46. }
    47. $start_ts = $temp;
    48. $a[$i] = date("Y-m-d", $temp);
    49. $i++;
    50. if(strlen($end)<=3) $temp = $i;
    51. }
    52. }else{
    53. die("<span style='font-weight: bold; font-size: 12px; font-face: tahoma; color: red'>Error in function: repeat()</span>");
    54. }
    55. return $a;
    56. }
    57. ?>


    Du deklarierst teils Variablen innerhalb von Bedingungen und willst die dann mit Return zurückgeben. Nicht gut. Außerdem ist ereg veraltet.
    Noch was: vorher hast du den Wert von $temp?



    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Link275“ ()

    Ok wenn ich error reporting anschalte kriege ich folgenden Fehler :

    PHP-Quellcode

    1. Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\index.php on line 523

    das ist die zeile :

    PHP-Quellcode

    1. if (ereg("-", $end)) {




    [EDIT]
    mit deinem Code kriege ich keinen Fehler Mehr aber der out bleibt der gleiche :

    Quellcode

    1. 2014-02-21 20-17-40
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Hi,

    und geht's denn mit meinem Code? Wie oben schon geschrieben ist ereg veraltet.

    Was für ein Output erwartest du denn? Also welchen Wert soll $LOLa bekommen?


    Link :thumbup:
    Hello World
    Der OutPut bleibt der Gleiche :(
    2014-02-21 20-17-40

    mit folgenden code:

    PHP-Quellcode

    1. $LOLa=repeat("2weekly","2014-02-21 20-17-40","2015-08-21 20-17-46");
    2. foreach($LOLa as $rt){
    3. echo $rt . "</br>";
    4. }


    LOLa soll die Datetimes beinhalten doch er zeigt leider immer nur eins ein :(


    Ich glaube ich habe den Fehler gefunden irgendwo hier:

    PHP-Quellcode

    1. $end_ts = strtotime($end);
    2. echo "IN" . $end . " / " . $diff ."</br>";
    3. $anz=intval(($end_ts-$start_ts)/$diff);


    weiß jemand wass ich tuen kann wenn strtotime nichts zurück gibt ?

    Ok die Lösung ist die :

    PHP-Quellcode

    1. function repeat($type, $start, $end) {
    2. $start_ts = strtotime(date("Y-m-d", strtotime($start)));
    3. $a = "";
    4. if($type == "daily" || $type == "weekly" || $type == "2weekly") {
    5. switch ($type) {
    6. case "daily": $diff = "86400"; break;
    7. case "weekly": $diff = "604800"; break;
    8. case "2weekly": $diff = "1209600"; break;
    9. }
    10. $a[0]=$start;
    11. if (preg_match("/\-/", $end)) {
    12. $end_ts = strtotime(date("Y-m-d", strtotime($end)));
    13. $anz=intval(($end_ts-$start_ts)/$diff);
    14. }else{
    15. $anz = $end;
    16. }
    17. for($i=1; $i<=$anz; $i++) {
    18. $a[$i] = date("Y-m-d", $start_ts + $i * $diff);
    19. }
    20. }elseif($type=="monthly_date" || $type=="monthly_day" || $type=="quarterly_date" || $type=="quarterly_day") {
    21. if(preg_match("/\-/", $end)){
    22. $end = strtotime($end);
    23. }else{
    24. $end = $end+1;
    25. }
    26. $a[0] = $start;
    27. $i = 1;
    28. while ($temp<$end) {
    29. switch ($type) {
    30. case "monthly_date":
    31. $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    32. break;
    33. case "monthly_day":
    34. if (!($i%3)) $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+35, date("Y", $start_ts));
    35. else $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+28, date("Y", $start_ts));
    36. break;
    37. case "quarterly_date":
    38. $temp = mktime(0, 0, 0, date("m", $start_ts)+3, date("d", $start_ts), date("Y", $start_ts));
    39. break;
    40. case "quarterly_day":
    41. $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+91, date("Y", $start_ts));
    42. break;
    43. default: $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    44. }
    45. $start_ts = $temp;
    46. $a[$i] = date("Y-m-d", $temp);
    47. $i++;
    48. if(strlen($end)<=3) $temp = $i;
    49. }
    50. }else{
    51. die("<span style='font-weight: bold; font-size: 12px; font-face: tahoma; color: red'>Error in function: repeat()</span>");
    52. }
    53. return $a;
    54. }

    :D danke link
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()

    Hi,

    bei mir klappt's so:

    PHP-Quellcode

    1. <?php
    2. function repeat($type, $start, $end) {
    3. $start_ts = strtotime($start);
    4. $end_ts = strtotime($end);
    5. $a = "";
    6. if($type == "daily" || $type == "weekly" || $type == "2weekly") {
    7. switch ($type) {
    8. case "daily": $diff = "86400"; break;
    9. case "weekly": $diff = "604800"; break;
    10. case "2weekly": $diff = "1209600"; break;
    11. }
    12. $a[0] = $start;
    13. $anz = 0;
    14. if(preg_match("/\-/", $end)) {
    15. $end_ts = $end;
    16. $anz = intval(($end-$start) / $diff);
    17. $anz = (strtotime($end) - strtotime($start)) / $diff;
    18. }else{
    19. $anz = $end;
    20. }
    21. for($i=1; $i <= $anz; $i++){
    22. array_push($a, date("Y-m-d", $start_ts + $i * $diff));
    23. }
    24. return $a;
    25. }elseif($type == "monthly_date" || $type == "monthly_day" || $type == "quarterly_date" || $type == "quarterly_day") {
    26. if(preg_match("/\-/", $end)){
    27. $end = strtotime($end);
    28. }else{
    29. $end++;
    30. }
    31. $a[0] = $start;
    32. $i = 1;
    33. while($temp < $end) {
    34. switch ($type) {
    35. case "monthly_date":
    36. $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    37. break;
    38. case "monthly_day":
    39. if (!($i%3)) $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+35, date("Y", $start_ts));
    40. else $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+28, date("Y", $start_ts));
    41. break;
    42. case "quarterly_date":
    43. $temp = mktime(0, 0, 0, date("m", $start_ts)+3, date("d", $start_ts), date("Y", $start_ts));
    44. break;
    45. case "quarterly_day":
    46. $temp = mktime(0, 0, 0, date("m", $start_ts), date("d", $start_ts)+91, date("Y", $start_ts));
    47. break;
    48. default: $temp = mktime(0, 0, 0, date("m", $start_ts)+1, date("d", $start_ts), date("Y", $start_ts));
    49. }
    50. $start_ts = $temp;
    51. $a[$i] = date("Y-m-d", $temp);
    52. $i++;
    53. if(strlen($end)<=3) $temp = $i;
    54. }
    55. }else{
    56. die("<span style='font-weight: bold; font-size: 12px; font-face: tahoma; color: red'>Error in function: repeat()</span>");
    57. }
    58. return $a;
    59. }
    60. //$LOLa=repeat("2weekly","2014-02-21 20-17-40","2015-08-21 20-17-46");
    61. $LOLa=repeat("2weekly","2014-02-21 20:17:40","2015-08-21 20:17:46");
    62. foreach($LOLa as $rt){
    63. echo $rt . "</br>";
    64. }
    65. ?>



    //EDIT: Ah jetz war ich zu langsam ^^


    Link :thumbup:
    Hello World