рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдерд╛, Reddit рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдкрд┐рд▓реНрд▓рд╛ рдордЬрд╝рд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреБрд░реЗ рд╣рд╛рд╕реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреЛрд╕реНрдЯ рдиреЗ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣
calc.exe рдореЗрдВ рдПрдХ
рдмрдЧ рдерд╛ред
рд╡рд┐рдВрдбреЛрдЬ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдореЗрдВ рдЧрд▓рдд рддрд┐рдерд┐ рд╕реАрдорд╛ рдЧрдгрдирд╛"рдареАрдХ рд╣реИ, рдпрд╣ рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдЧрд▓рддреА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ," рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рд╕реЛрдЪрд╛ред рд╕рдкреНрддрд╛рд╣ рдХреА рд╕рдВрдЦреНрдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрдЧ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдпрд╛ рд╕реАрдорд╛ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рдмрдирд╛рддреА рд╣реИ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░рдгред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рджреЛрд╕реНрддрд╛рдирд╛ рдмреНрд░рд╣реНрдорд╛рдВрдбреАрдп рдкрдбрд╝реЛрд╕реА рд╕реЗ рдЙрдЪреНрдЪ-рдКрд░реНрдЬрд╛ рдХрд┐рд░рдг рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдЙрд▓реНрдЯрд╛ рд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдореИрдВрдиреЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛: рдореИрдВрдиреЗ рдЗрд╕реЗ "рдореЗрд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдорд╢реАрди рдкрд░ рдХреЛрд╢рд┐рд╢ рдХреАред рдФрд░ рдореЗрд░реА рдорд╢реАрди рдкрд░ "31 рдЬреБрд▓рд╛рдИ - 31 рджрд┐рд╕рдВрдмрд░" рдкреЛрд╕реНрдЯ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдиреЗ "5 рдорд╣реАрдиреЗ" рдХрд╛ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ "31 рдЬреБрд▓рд╛рдИ - 30 рджрд┐рд╕рдВрдмрд░" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЧрд▓рдд рдорд╛рди "5 рдорд╣реАрдиреЗ, 613566756 рд╕рдкреНрддрд╛рд╣, 3 рджрд┐рди" рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╣рд┐рд▓рд╛рдирд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛: "рдУрд╣, рдХреНрдпрд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП Microsoft рдиреЗ рд╕реНрд░реЛрдд рдЦреЛрд▓рд╛ рд╣реИ?"
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ред рдпрд╣ рдЧрд▓рддреА рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛, рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдпреВрдбрдмреНрд▓реНрдпреВрдкреА рд╡рд░реНрдХрд▓реЛрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреА рдПрдХ рдЕрдбрд╝рдЪрди рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛ рдЧрдпрд╛ред
рдЙрди рдХреЛрдбрд┐рдЧреЛрдВ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЬрд┐рдирд╕реЗ рдЖрдк рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдк рд╕рдордп рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рд╕реНрд░реЛрдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдмрдЧ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, XAML рдпрд╛ WinRT рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛, рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред
рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реА рдФрд░ рдмрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ "рдХреИрд▓рдХреБрд▓реЗрдЯрд░" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрд╛ред рдореБрдЭреЗ
DateCalculator.xaml
рдорд┐рд▓рд╛, рддреЛ рдпрд╣
DateDiff_FromDate to DateCalculatorViewModel.cpp
рдФрд░, рдЖрдЦрд┐рд░рдХрд╛рд░,
DateCalculator.cpp
рдирд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЪрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдВрддрд┐рдо
DateDifference
рдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд▓рдд рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА, рдмрд▓реНрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдХреА рдПрдХ рддреНрд░реБрдЯрд┐ рдереАред
рд╕рд░рд▓реАрдХреГрдд рдЫрджреНрдо рдХреЛрдб рдореЗрдВ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
DateDifference calculate_difference(start_date, end_date) { uint[] diff_types = [year, month, week, day] uint[] typical_days_in_type = [365, 31, 7, 1] uint[] calculated_difference = [0, 0, 0, 0] date temp_pivot_date date pivot_date = start_date uint days_diff = calculate_days_difference(start_date, end_date) for(type in differenceTypes) { temp_pivot_date = pivot_date uint current_guess = days_diff /typicalDaysInType[type] if(current_guess !=0) pivot_date = advance_date_by(pivot_date, type, current_guess) int diff_remaining bool best_guess_hit = false do{ diff_remaining = calculate_days_difference(pivot_date, end_date) if(diff_remaining < 0) {
рдпрд╣ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рддрд░реНрдХ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ:
- рдкреВрд░реЗ рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдЕрдВрддрд┐рдо рдкреВрд░реНрдг рд╡рд░реНрд╖ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рдорд╣реАрдиреЛрдВ рдХреА рдЧрдгрдирд╛ рд╣реЛрддреА рд╣реИ
- рдкрд┐рдЫрд▓реЗ рдкреВрд░реЗ рдорд╣реАрдиреЗ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рд╕рдкреНрддрд╛рд╣ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдЕрдВрддрд┐рдо рдкреВрд░реНрдг рд╕рдкреНрддрд╛рд╣ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рд╢реЗрд╖ рджрд┐рди рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рджрд░рдЕрд╕рд▓, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╢реБрд░реБрдЖрдд
date = advance_date_by(date, month, somenumber) date = advance_date_by(date, month, 1)
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
date = advance_date_by(date, month, somenumber + 1)
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ:
"рдпрджрд┐ рдЖрдк рдорд╣реАрдиреЗ рдХреЗ 31 рд╡реЗрдВ рджрд┐рди, рдЕрдЧрд▓реЗ рдорд╣реАрдиреЗ 30 рджрд┐рди, рдЖрдк рдПрдХ рдорд╣реАрдирд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд╣рд╛рдВ рдЬрд╛рдПрдВрдЧреЗ?"рдпрд╣
Windows.Globalization.Calendar.AddMonths (Int32) рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рдХрд┐ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм "30 рддрд╛рд░реАрдЦ рдХреЛ" рд╣реЛрдЧрд╛ред
рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:
"31 рдЬреБрд▓рд╛рдИ + 4 рдорд╣реАрдиреЗ = 30 рдирд╡рдВрдмрд░"
"30 рдирд╡рдВрдмрд░ + 1 рдорд╣реАрдирд╛ = 30 рджрд┐рд╕рдВрдмрд░"
"31 рдЬреБрд▓рд╛рдИ + 5 рдорд╣реАрдиреЗ = 31 рджрд┐рд╕рдВрдмрд░"
рдЗрд╕ рдкреНрд░рдХрд╛рд░, AddMonths рдСрдкрд░реЗрд╢рди рди рддреЛ
рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдп рд╣реИ (AddMonth-рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рде), рди рд╣реА
рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ , рдФрд░ рди рд╣реА
рд╕рд╣рдпреЛрдЧреА ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЬреЛрдбрд╝" рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рд╕рдордп рдФрд░ рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬреЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИ?
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реАрдорд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЗрддрдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐
days_diff
рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ -1 рджрд┐рдиреЛрдВ рдХреЛ рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╣рдлреНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЪрдХреНрд░ рдХреЗ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рддрдм
current_guess
рдХреЛ рдХрдо рдХрд░рдХреЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд░ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЦреИрд░, рдпрд╣ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдмрд┐рддрд╛рдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рдерд╛ред рдореИрдВрдиреЗ рдиреНрдпреВрдирддрдо "рдлрд┐рдХреНрд╕" рдХреЗ рд╕рд╛рде рдЬреАрдердм рдкрд░ рдПрдХ
рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдпрд╛ред рдореИрдВрдиреЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ "рд╕реБрдзрд╛рд░" рдбрд╛рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЧрдгрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЕрдЧрд░ рд╣рдо рдорд╛рди рд▓реЗрдВ рдХрд┐ "31 рдЬреБрд▓рд╛рдИ + 4 рдорд╣реАрдиреЗ = 30 рдирд╡рдВрдмрд░ред" рдпрджреНрдпрдкрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирд╡ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕рд╕реЗ рдХрдо рдЧрд▓рдд рдерд╛ред