Siirry sisältöön
Odoo Menu
  • Kirjaudu sisään
  • Kokeile ilmaiseksi
  • Sovellukset
    Talous
    • Kirjanpito
    • Laskutus
    • Kulut
    • Datataulukot (BI)
    • Asiakirjat
    • Allekirjoita
    Myynti
    • CRM
    • Myynti
    • Kassajärjestelmä myymälään
    • Kassajärjestelmä ravintolaan
    • Tilaukset
    • Vuokraus
    Verkkosivut
    • Verkkosivun Rakennustyökalu
    • Verkkokauppa
    • Blogi
    • Foorumi
    • Livechat
    • Verkko-oppiminen
    Toimitusketju
    • Varastointi
    • Tuotanto
    • Tuotteen elinkaaren hallinta (PLM)
    • Ostot
    • Huolto
    • Laatu
    Henkilöstöhallinto
    • Työntekijät
    • Rekrytointi
    • Vapaat
    • Arvioinnit
    • Suositukset
    • Kuljetuskalusto
    Markkinointi
    • Somemarkkinointi
    • Sähköpostimarkkinointi
    • Tekstiviestimarkkinointi
    • Tapahtumat
    • Markkinoinnin automaatio
    • Kyselyt
    Palvelut
    • Projekti
    • Työaikakirjaukset
    • Kenttähuolto
    • Asiakaspalvelu
    • Suunnittelu
    • Ajanvaraukset
    Tuottavuus
    • Viestintä
    • Hyväksynnät
    • IoT
    • IP-puhe
    • Tietokirjasto
    • WhatsApp
    Kolmannen osapuolen sovellukset Odoo-Studio Odoo-Pilvialusta
  • Toimialat
    Vähittäiskauppa
    • Kirjakauppa
    • Vaatekauppa
    • Huonekaluliike
    • Ruokakauppa
    • Laitteistokauppa
    • Lelukauppa
    Ruoka & Majoitus
    • Baari ja Pubi
    • Ravintola
    • Pikaruoka
    • Majatalo
    • Juomien jakelija
    • Hotelli
    Kiinteistöt
    • Kiinteistönvälitystoimisto
    • Arkkitehtitoimisto
    • Rakentaminen
    • Kiinteistönhallinta
    • Puutarhanhoito
    • Kiinteistön omistajien yhdistys
    Konsultointi
    • Tilitoimisto
    • Odoo-kumppani
    • Markkinointitoimisto
    • Lakitoimisto
    • Osaajahankinta
    • Tilintarkastus & sertifiointi
    Tuotanto
    • Tekstiili
    • Metalli
    • Huonekalut
    • Ruoka
    • Panimo
    • Yrityslahjat
    Terveys & Liikunta
    • Urheiluseura
    • Silmälasiliike
    • Kuntokeskus
    • Hyvinvointialan ammattilaiset
    • Apteekki
    • Kampaamo
    Kaupat
    • Yleismies
    • IT-laitteisto & Tuki
    • Aurinkoenergiajärjestelmät
    • Suutari
    • Siivouspalvelut
    • LVI-palvelut
    Muut
    • Voittoa tavoittelematon järjestö
    • Ympäristötoimisto
    • Mainostaulujen vuokraus  
    • Valokuvaus
    • Leasing-pyörät
    • Ohjelmistojen jälleenmyyjä
    Selaa kaikkia toimialoja
  • Yhteisö
    Opi
    • Kurssit
    • Dokumentaatio
    • Todistukset
    • Koulutus
    • Blogi
    • Podcast
    Kannusta kouluttautumaan
    • Koulutusohjelmat
    • Scale Up! Liiketoimintapeli
    • Vieraile Odoolla
    Hanki ohjelmisto
    • Lataa
    • Vertaile versioita
    • Julkaisut
    Tee yhteistyötä
    • Github
    • Foorumi
    • Tapahtumat
    • Käännökset
    • Ryhdy kumppaniksi
    • Kumppanipalvelut
    • Rekisteröi tilitoimistosi
    Hanki palveluja
    • Löydä kumppani
    • Löydä kirjanpitäjä
    • Varaa asiantuntijatapaaminen
    • Implementaatiopalvelut
    • Asiakasreferenssit
    • Tuki
    • Versionkorotukset
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Varaa demo
  • Hinnoittelu
  • Asiakaspalvelu

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Kirjanpito
  • Varastointi
  • PoS
  • Projekti
  • MRP
All apps
Sinun on rekisteröidyttävä, jotta voit olla vuorovaikutuksessa yhteisön kanssa.
Kaikki kirjoitukset Ihmiset Merkit
Tunnisteet (Näytä kaikki)
odoo accounting v14 pos v15
Tietoa tästä foorumista
Sinun on rekisteröidyttävä, jotta voit olla vuorovaikutuksessa yhteisön kanssa.
Kaikki kirjoitukset Ihmiset Merkit
Tunnisteet (Näytä kaikki)
odoo accounting v14 pos v15
Tietoa tästä foorumista
Apua

How to exclude specific day between two date in calculation ?

Tilaa

Saat ilmoituksen, kun tähän viestiin ilmaantuu aktiviteettia

Tämä kysymys on merkitty
pythondateexcludeignore
13 Vastaukset
14607 Näkymät
Avatar
Ankit H Gandhi(AHG)

Hello People,

I want to total number of days from two dates. but there is one condition to count total number of day but excluded(ignore) specific day ?

Like

I have below dates  

start date: 01/01/2015

end date: 31/03/2015

Here I want total number of days between start date and end date, but not including " Tuesday " in total number of days.

Thanks in Advance.

1
Avatar
Hylkää
Avatar
Temur
Paras vastaus

@Ankit, here is brute-force version:

from datetime import datetime, date, timedelta

date_start = datetime.strptime('2015-01-01','%Y-%m-%d').date()
date_end = datetime.strptime('2015-03-31','%Y-%m-%d').date()

delta_day = timedelta(days=1)

days = {'mon':0,'tue':1,'wed':2,'thu':3,'fri':4,'sat':5,'sun':6}

dt = date_start
day_count=0

while dt <= date_end:
if dt.weekday() != days['tue']:
day_count+=1
dt += delta_day

But suggestion of @Drees is much more lightweight and should be executed faster for large periods, if you'll get it worked.


UPDATE:

slightly modified approach suggested by @Drees, if we make sure day count starts at the weekday we are interested in (by "removing" days before first occurrence of the target day i.e. weekday to be excluded), then total count of weekday occurrence will be:

# total_days  -- days between start_date (inclusive) and and_date (inclusive)
# days_before -- days from total_days period, that are before first occurrence of the weekday to be excluded

weekday_count = (total_days - days_before) / 7

if (total_days - days_before) % 7:
weekday_count = weekday_count + 1

days_wit_excluded_target_day = total_days - weekday_count

If we're agree that above code may calculate correctly the day count in [start_date, end_date] period with a target_weekday excluded, then there is a corresponding code:

version with calculation

from datetime import datetime

date_start_val = '2015-01-01' # start date (inclusive)
date_end_val = '2015-03-31' # end date (inclusive)

date_start = datetime.strptime(date_start_val,'%Y-%m-%d').date()
date_end = datetime.strptime(date_end_val,'%Y-%m-%d').date()

days = {'mon':0,'tue':1,'wed':2,'thu':3,'fri':4,'sat':5,'sun':6}

total_days = (date_end - date_start).days + 1

first_weekday = date_start.weekday()
target_weekday = days['tue']

if target_weekday == first_weekday:
days_before = 0
elif target_weekday < first_weekday:
days_before = 7 - first_weekday + target_weekday
else:
days_before = target_weekday - first_weekday
 
weekday_count = total_days - days_before
if weekday_count > 0:
weekday_count = weekday_count/7 + (weekday_count%7 and 1 or 0)
else:
weekday_count = 0

day_count = total_days - weekday_count

this version should be much faster on large periods then other versions.


1
Avatar
Hylkää
Ankit H Gandhi(AHG)
Tekijä

Thanks for your help @ Temur !!! It is fully working...+1

Temur

Please see the last version that I've added after update. it's a recommended version.

Temur

wrapped code into the python function, see a gist

Ankit H Gandhi(AHG)
Tekijä

Sorry @ Temur Using updated code I am not get perfect total days. I am using below date for count date_start_val = '2015-07-04' date_end_val = '2015-07-05' I got total number of days in 0 (zero), but actually total number of days will be 2 (Two) . Please advice on it.

Temur

<=0 as there is not Tuesday at all in date range ['2015-07-04','2015-07-05' ] then day_count = 0 were executed under else clause in the above code fragment, instead of weekday_count = 0. It's corrected now in the answer and function in gist is updated accordingly.

Ankit H Gandhi(AHG)
Tekijä

Thanks again now it's work fine..@ Temur

Temur

You're welcome

Avatar
Rihene
Paras vastaus

Hi Ankit;

What i propose to you is to calculate the total of days between start_date and end_date.

And then, to get your 'Tuesday' day you have to divide the total number by seven.

And you have to get the day of the first_date as shown by this code:

Python:

>>> import datetime

>>> datetime.datetime.today()

datetime.datetime(2012, 3, 23, 23, 24, 55, 173504)

>>> datetime.datetime.today().weekday()

4

Where weekday Returns the day of the week as an integer, where Monday is 0 and Sunday is 6.

Example:

Total_date = 29

29/7 = 4 + 1 so there is 4 tuesday and 1 < 3 if the start_date is monday

so total_date becomes 25.

Hope this may help you :)

Regards.

2
Avatar
Hylkää
Ankit H Gandhi(AHG)
Tekijä

Thanks for you quick response @ Dress Far +1 I had little bit confusion with your code but @ Temur solved out confusion

Avatar
Akhil P Sivan
Paras vastaus

Hi Ankit,

If the start date and end date are fields of type date, you can try the following code:

For example, to avoid tuesdays and get the day count:

import dateutil.parser
import datetime
from openerp import models, fields

class your_class(models.Model):
_name = "your.model"

def your_function(self):
days_count = 0
while (start_date < end_date):
day = dateutil.parser.parse(start_date).date().weekday()
if day != 1:
days_count += 1
start_date = start_date + datetime.timedelta(days=1)

Here days_count will give the no. of days between two dates avoided tuesday

if the start_date and end_date are not date fields, you need convert to date type like this:

s_date = dateutil.parser.parse(start_date).date()
1
Avatar
Hylkää
Ankit H Gandhi(AHG)
Tekijä

Thanks @ Akhil.. It is work fine. +1

Avatar
Rabie Sakhri
Paras vastaus

Thanks for this help

0
Avatar
Hylkää
Nautitko keskustelusta? Älä vain lue, vaan osallistu!

Luo tili jo tänään nauttiaksesi yksinoikeusominaisuuksista ja osallistuaksesi mahtavaan yhteisöömme!

Rekisteröidy
Aiheeseen liittyviä artikkeleita Vastaukset Näkymät Toimenpide
How to verify that a field date is empty? Ratkaistu
python date
Avatar
Avatar
Avatar
3
jouluk. 23
46702
Format language date_format '%B' in python Ratkaistu
language python date
Avatar
Avatar
1
maalisk. 17
29678
transformation of date
python date change
Avatar
Avatar
Avatar
2
maalisk. 16
4450
How to extract the month from a date field?
python date month odoo9
Avatar
Avatar
Avatar
2
toukok. 22
17623
How can i get sum of records between two dates? Ratkaistu
python date datetime odoo
Avatar
Avatar
3
maalisk. 24
5354
Yhteisö
  • Kurssit
  • Dokumentaatio
  • Foorumi
Avoin lähdekoodi
  • Lataa
  • Github
  • Runbot
  • Käännökset
Palvelut
  • Odoo.sh hosting
  • Tuki
  • Versionkorotus
  • Räätälöidyt kehitykset
  • Koulutus
  • Löydä kirjanpitäjä
  • Löydä kumppani
  • Ryhdy kumppaniksi
Meistä
  • Yrityksemme
  • Brändiominaisuudet
  • Ota yhteyttä
  • Työpaikat
  • Tapahtumat
  • Podcast
  • Blogi
  • Asiakkaat
  • Oikeudellinen ilmoitus • Yksityisyys
  • Tietoturva
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo on kokoelma avoimen lähdekoodin yrityssovelluksia, jotka kattavat kaikki yrityksesi tarpeet: asiakkuudenhallinta eli CRM, verkkokauppa, kirjanpito, varastointi, kassajärjestelmä, projektinhallinta, jne.

Odoon uniikki arvolupaus on olla samanaikaisesti erittäin helppokäyttöinen ja täysin integroitu.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now