Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 9 of 9
  1. #1
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts

    calculate 1st Tuesday ea. January?

    Hey All,
    I need a little help. Total noob so please be patient.

    The idea is to establish thirteen 28 day contact_periods or contact_cycles for a CRM application, on a 4 day offset, for two groups of contacts.

    Period_1 begins on the first Tuesday of each January for Group_A and on the first Saturday of each January for Group_B -- from now to eternity.

    Period_2 begins 28 days after Period_1 ... something like...
    PHP Code:
    $timedate = new TimeDate(); 
    $today $timedate->handle_offset(date("Y-m-d"), $timedate >dbDayFormatfalse); 

    $StartCycleYear = (1stTuesday_ea_January); //if Group_A  || if Group_B ???? 

    $StartPeriod_2 $StartCycleYear("Y-m-d"strtotime('+28 days')); 
    $StartPeriod_3 $StartPeriod_2 ("Y-m-d"strtotime('+28 days')); 
    //etc... 

    if ($today $StartPeriod_2) { 
    $Period='$StartCycleYear'
    } else if (
    $today $StartPeriod_2 && $today $StartPeriod_3 ){ 
    $Period'$StartPeriod_2'

    //update visit_by date
    $update_visit_by =" UPDATE accounts,contacts,emailman SET accounts.visit_by = '$Period'  WHERE accounts.name = contacts.agency_name AND emailman.related_id = contacts.id AND emailman.marketing_id = '8c63da95-3b5f-3348-3465-45245671f1e1' ";
            
    $result = @mysql_query ($update_visit_by); // Run the query. 
    I offer a rough sketch only. I know the syntax is off, and I can see that such an approach is going to grow into an
    unwieldy mass of some 100 odd lines, but if it makes any sense at all, how might I establish/calculate $StartCyleYear
    and then add to that date in 28 day increments with conditions for Group_A || Group_B?
    Otherwise, I'm MORE THAN OPEN to ANY suggestions as to how I might rethink my approach.
    Last edited by fuzzy1; 11-14-2006 at 03:39 PM.

  • #2
    Super Moderator
    Join Date
    May 2002
    Location
    Perth Australia
    Posts
    4,040
    Thanks
    10
    Thanked 92 Times in 90 Posts
    this is why I luuurrrve PHP...
    PHP Code:
    <?php
    $start 
    strtotime("first tuesday jan 2007");
    echo 
    date('Y-m-d',$start)."\n";
    $te = (28 * (3600*24));
    while(
    $x<=12){
        
    $f += $te;
        ++
    $x;
        echo 
    date('Y-m-d',($start+$f))."\n";
    }
    ?>
    how you use those dates in your scenario I dont know, at worst you can just load them into an array and use later (just change the start date for the second group.
    resistance is...

    MVC is the current buzz in web application architectures. It comes from event-driven desktop application design and doesn't fit into web application design very well. But luckily nobody really knows what MVC means, so we can call our presentation layer separation mechanism MVC and move on. (Rasmus Lerdorf)

  • #3
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts
    Cool! I was sure I had way too much code in the works.
    Not sure I understand your example, but it looks promising.
    No doubt I'll have follow up questions, but for now...
    I'll just have to play with it and see what I can work out.
    Till then...
    Many THANKS!

  • #4
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts
    Well...
    I twisted and turned this Seven ways from Sunday, but ...
    PHP Code:
    <?php
    $start 
    strtotime("first tuesday jan 2007");
    echo 
    date('Y-m-d',$start)."\n";
    ?>
    ... returns 2007-01-14 , but the first tuedsday in January 2007 is 2007-01-02 so... hmmmm?

    What am I missing?

  • #5
    Super Moderator
    Join Date
    May 2002
    Location
    Perth Australia
    Posts
    4,040
    Thanks
    10
    Thanked 92 Times in 90 Posts
    weird , my PHP (5.1.6) returns ...

    2007-01-02
    2007-01-30
    2007-02-27
    2007-03-27
    2007-04-24
    2007-05-22
    2007-06-19
    2007-07-17
    2007-08-14
    2007-09-11
    2007-10-09
    2007-11-06
    2007-12-04
    2008-01-01

    which looks right ... I see there have been mods to strtotime() so perhaps thats the issue if you are on PHP < 5.1 ?? ...will have a looksee
    resistance is...

    MVC is the current buzz in web application architectures. It comes from event-driven desktop application design and doesn't fit into web application design very well. But luckily nobody really knows what MVC means, so we can call our presentation layer separation mechanism MVC and move on. (Rasmus Lerdorf)

  • #6
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts
    Aha!!!

    I'm running on 4.4.2, cause 5.1.2 is not supported in SugarCRM 4.0.1f (though I've yet to experience any failings in the CRM running 5.1.2)

    If there is a workaround for php4.4.2 I'd sure like to learn about it.
    Meanwhile, switching to 5.1.2 it works as promised.
    Thanks Again!
    TJ

  • #7
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts
    So, moving right along...

    Now I'm thinking ...
    PHP Code:
    <?php 
    $start 
    strtotime("first tuesday  jan 2007");

    $te = (28 * (3600*24));
        
    $f += $te;
    $period_1date('Y-m-d',$start)."\n";
        
    $period_2 date('Y-m-d',($period_1+$f))."\n";
        
    $period_3 date('Y-m-d',($period_2+$f))."\n";
        echo 
    $period_1."<br>";
        echo 
    $period_2."<br>";
        echo 
    $period_3."<br>";
    ?>
    ... but that only gets me
    2007-01-02
    1970-01-28
    1970-01-28

    I guess it's the "add to an array" part that I need help with now.
    Last edited by fuzzy1; 11-14-2006 at 07:32 PM.

  • #8
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts
    Ding !)))
    In Round 3 I tried...
    PHP Code:
    <?php
    $start 
    strtotime("first tuesday jan 2007");
    echo 
    date('Y-m-d',$start)."\n";
    $te = (28 * (3600*24));
    while(
    $x<=12){
        
    $f += $te;
        ++
    $x;
    $cycleYear date('Y-m-d',($start+$f));
    $array explode (' '$cycleYear);
    }


    echo 
    '<select name="endDate">';
    foreach (
    $array as $key => $value) {
        echo 
    "<option value=\"$key\"> 
        $value</option>\n"
    ;
    }
    echo 
    '</select>';
    ?>
    which get's me a dropdown with a single option 2008-01-01 (should be 2007-01-28) How would I convert $cycleYear to an array?

  • #9
    Regular Coder
    Join Date
    Apr 2006
    Posts
    311
    Thanks
    17
    Thanked 0 Times in 0 Posts

    Resolved!

    PHP Code:
    <?php
    $array 
    = array(); 
    $start strtotime("first tuesday jan 2007"); 
    echo 
    date('Y-m-d',$start)."\n"
    $te = (28 * (3600*24)); 
    while(
    $x<=12){ 
        
    $f += $te
        ++
    $x
    //    echo date('Y-m-d',($start+$f))."\n"; 
    //} 
    $array[] = date('Y-m-d',($start+$f)); 


    echo 
    '<select name="endDate">'
    foreach (
    $array as $key => $value) { 
        echo 
    "<option value=\"$key\"> 
        $value</option>\n"


    echo 
    '</select>'
    ?>


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •