Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. How to calculate a date one moth before from Current date?

How to calculate a date one moth before from Current date?

Scheduled Pinned Locked Moved C / C++ / MFC
helptutorialquestion
14 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    megha_gharote
    wrote on last edited by
    #1

    Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha

    R CPalliniC enhzflepE D 4 Replies Last reply
    0
    • M megha_gharote

      Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha

      R Offline
      R Offline
      Rajesh R Subramanian
      wrote on last edited by
      #2

      megha_gharote wrote:

      Can anybody please help me out with this?

      What *exactly* is that you need help with? Tell what have you tried or thought of so far.

      Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

      M 1 Reply Last reply
      0
      • R Rajesh R Subramanian

        megha_gharote wrote:

        Can anybody please help me out with this?

        What *exactly* is that you need help with? Tell what have you tried or thought of so far.

        Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

        M Offline
        M Offline
        megha_gharote
        wrote on last edited by
        #3

        This is what i did till now.. CTime currentTime=CTime::GetCurrentTime(); int nDay = currentTime.GetDay(); int nMonth = currentTime.GetMonth(); int nYear = currentTime.GetYear(); int nHour = currentTime.GetHour(); int nMin = currentTime.GetMinute(); int nSec = currentTime.GetSecond(); currentTime -= 2592000; ///30*24*60*60 (Seconds) nDay = currentTime.GetDay(); nMonth = currentTime.GetMonth(); nYear = currentTime.GetYear(); nHour = currentTime.GetHour(); nMin = currentTime.GetMinute(); nSec = currentTime.GetSecond(); But i dont want to calculate it like this. Can anybody suggest me soem other method?

        R 1 Reply Last reply
        0
        • M megha_gharote

          Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha

          CPalliniC Online
          CPalliniC Online
          CPallini
          wrote on last edited by
          #4

          I think the below code will do the trick, anyway verifying it is up to you :rolleyes: CTime today = CTime::GetCurrentTime();
          CTime aMonthAgo;
          CTimeSpan ts(today.GetDay(),0,0,0);
          aMonthAgo = today - ts;
          aMonthAgo += CTimeSpan( - aMonthAgo.GetDay() + today.GetDay(), 0, 0, 0);
          [added #1] That was buggy, forget it :-O . Anyway are you aware that your requirement cannot be satisfied when current day is for instance March 31th? [/added #1] [added #2] Fixed code:

          CTime today = CTime::GetCurrentTime();
          CTime aMonthAgo;
          CTimeSpan ts( today.GetDay(), 0, 0, 0 );
          aMonthAgo = today - ts;
          int iSpan = aMonthAgo.GetDay() - today.GetDay();
          if (iSpan > 0)
          aMonthAgo -= CTimeSpan( iSpan, 0, 0, 0);

          :) This code sets aMonthAgo to: (1) a date having the same day (of month) of current date, but month equal to previous month, whenever such requirement can be satisfied. (2) Last day of previous month whenever the requirement (1) cannot be satisfied (for instance when input date is March 31th). :)

          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
          [My articles]

          modified on Tuesday, October 14, 2008 6:48 AM

          In testa che avete, signor di Ceprano?

          1 Reply Last reply
          0
          • M megha_gharote

            This is what i did till now.. CTime currentTime=CTime::GetCurrentTime(); int nDay = currentTime.GetDay(); int nMonth = currentTime.GetMonth(); int nYear = currentTime.GetYear(); int nHour = currentTime.GetHour(); int nMin = currentTime.GetMinute(); int nSec = currentTime.GetSecond(); currentTime -= 2592000; ///30*24*60*60 (Seconds) nDay = currentTime.GetDay(); nMonth = currentTime.GetMonth(); nYear = currentTime.GetYear(); nHour = currentTime.GetHour(); nMin = currentTime.GetMinute(); nSec = currentTime.GetSecond(); But i dont want to calculate it like this. Can anybody suggest me soem other method?

            R Offline
            R Offline
            Rajesh R Subramanian
            wrote on last edited by
            #5

            Try this instead:

            SYSTEMTIME varTime;
            GetSystemTime(&varTime);
            varTime.wMonth--;

            After the third statement, the month would be decremented by one. Kinda obvious, but you asked for it. Add: Oops! I haven't taken account of the year January. But I think that you must be able to do it yourself now. :-\

            Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

            N 1 Reply Last reply
            0
            • M megha_gharote

              Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha

              enhzflepE Offline
              enhzflepE Offline
              enhzflep
              wrote on last edited by
              #6
              SYSTEMTIME today, lastMonth;
              
              // get current time and make a duplicate of the information
              GetLocalTime(&today);
              memcpy(&lastMonth, &today, sizeof(SYSTEMTIME));
              
              // as long as it's not january, 1 month ago is still in this year
              if (lastMonth.wMonth > 1)
                  lastMonth.wMonth--;
              
              // set month to december of last year
              else
              {
                  lastMonth.wMonth = 12;
                  lastMonth.wYear--;
              }
              
              R 1 Reply Last reply
              0
              • enhzflepE enhzflep
                SYSTEMTIME today, lastMonth;
                
                // get current time and make a duplicate of the information
                GetLocalTime(&today);
                memcpy(&lastMonth, &today, sizeof(SYSTEMTIME));
                
                // as long as it's not january, 1 month ago is still in this year
                if (lastMonth.wMonth > 1)
                    lastMonth.wMonth--;
                
                // set month to december of last year
                else
                {
                    lastMonth.wMonth = 12;
                    lastMonth.wYear--;
                }
                
                R Offline
                R Offline
                Rajesh R Subramanian
                wrote on last edited by
                #7

                enhzflep wrote:

                // as long as it's not january,

                My 5 for your attention to detail. I missed out on the case where the month could be January! :)

                Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                enhzflepE 1 Reply Last reply
                0
                • R Rajesh R Subramanian

                  enhzflep wrote:

                  // as long as it's not january,

                  My 5 for your attention to detail. I missed out on the case where the month could be January! :)

                  Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                  enhzflepE Offline
                  enhzflepE Offline
                  enhzflep
                  wrote on last edited by
                  #8

                  Oh gee Raj, thanks.:rose: Quick question - do I lose thhose points for forgetting to consider the question: What is the date 1 month prior to the 30th of march?

                  CPalliniC R 2 Replies Last reply
                  0
                  • enhzflepE enhzflep

                    Oh gee Raj, thanks.:rose: Quick question - do I lose thhose points for forgetting to consider the question: What is the date 1 month prior to the 30th of march?

                    CPalliniC Online
                    CPalliniC Online
                    CPallini
                    wrote on last edited by
                    #9

                    That's a flaw of OP's requirements. The same applies to March 31th (and, for most years, 29th), May 31th,... :)

                    If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                    This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                    [My articles]

                    In testa che avete, signor di Ceprano?

                    1 Reply Last reply
                    0
                    • enhzflepE enhzflep

                      Oh gee Raj, thanks.:rose: Quick question - do I lose thhose points for forgetting to consider the question: What is the date 1 month prior to the 30th of march?

                      R Offline
                      R Offline
                      Rajesh R Subramanian
                      wrote on last edited by
                      #10

                      As CPallini said. :)

                      Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                      1 Reply Last reply
                      0
                      • R Rajesh R Subramanian

                        Try this instead:

                        SYSTEMTIME varTime;
                        GetSystemTime(&varTime);
                        varTime.wMonth--;

                        After the third statement, the month would be decremented by one. Kinda obvious, but you asked for it. Add: Oops! I haven't taken account of the year January. But I think that you must be able to do it yourself now. :-\

                        Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                        N Offline
                        N Offline
                        Nelek
                        wrote on last edited by
                        #11

                        What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:

                        Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.

                        R 2 Replies Last reply
                        0
                        • N Nelek

                          What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:

                          Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.

                          R Offline
                          R Offline
                          Rajesh R Subramanian
                          wrote on last edited by
                          #12

                          That was discussed two posts below here[^]. But that is an exercise that the OP must take care of. :)

                          Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                          1 Reply Last reply
                          0
                          • N Nelek

                            What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:

                            Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.

                            R Offline
                            R Offline
                            Rajesh R Subramanian
                            wrote on last edited by
                            #13

                            Nelek wrote:

                            What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash?

                            BTW, I forgot to mention it won't *Crash* anyways. SYSTEMTIME is just a structure and it can store the value you put into it. The trouble may come, only when a call to something like SetTime() is called with the new time structure after decrement has happened. :)

                            Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]

                            1 Reply Last reply
                            0
                            • M megha_gharote

                              Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha

                              D Offline
                              D Offline
                              David Crow
                              wrote on last edited by
                              #14

                              If the current date happens to be March 31st and the year is not a leap year, the most days you'd be off is 3. That said, once you subtract 1 from the current month (use the % operator so that it will wrap back around to December as needed), you may also need to subtract up to 3 days to have a valid date.

                              "Love people and use things, not love things and use people." - Unknown

                              "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups