Algoritmo di calcolo della data

3

Sto lavorando a un progetto per pianificare un negozio di macchine, fondamentalmente ho tutto coperto, MA calcoli di date, ho un metodo chiamato schedule (lavorando su PHP qui):

public function schedule($start_date, $duration_in_minutes)

Ora il mio problema è che attualmente sto calcolando manualmente l'ora di fine perché i calcoli temporali hanno le seguenti regole:

  1. Durante i giorni feriali, lavora con l'orario lavorativo (dalle 7:00 alle 17:00)
  2. Lavora il sabato dalle 7:00 alle 14:00
  3. Ignora le festività (in Colombia abbiamo MOLTE feste)

Ho già una tabella di ricerca per le vacanze, ho anche una versione Java di questo algoritmo che ho scritto per una versione precedente del progetto, ma anche quella manuale.

C'è un modo per calcolare un orario di fine da una determinata durata ?, il mio problema è che devo prendere in considerazione le regole di cui sopra, sto cercando una (forse?) soluzione basata sulla matematica, tuttavia io attualmente indosso ho la mente di escogitare una tale soluzione da solo.

Sarò felice di fornire campioni di codice, se necessario.

    
posta Julian Cuevas 11.12.2012 - 18:04
fonte

3 risposte

3

Penso che questo potrebbe aiutarti:

È un'implementazione C # di tutto il tuo algoritmo ad eccezione delle festività (che dovresti essere in grado di capire dato il resto del codice).

Si inizia modellando una settimana lavorativa (dal lunedì al venerdì, dalle 8:00 alle 17:00, per esempio, con un'ora al giorno a pranzo). Quindi puoi fare domande come "se ho un compito che richiede 15 ore e inizio alle 9:22 di martedì, quando finirò?"

Se hai già fatto un po 'di Java, spero che tu possa leggere il C #. In alternativa, qui c'è una porta JavaScript:

risposta data 11.12.2012 - 18:37
fonte
1

Sembra una tabella per elencare le festività e controllare la data rispetto a quella tabella, quindi controllare il giorno della settimana per quella data ($ dw = date ("w", $ timestamp);) .. Avere una tabella per ore per ogni giorno della settimana (questo lo rende configurabile). Quindi sottrarre ore dalla data di inizio fino a quando non ci sono più ore da sottrarre ..

pseudocodice:

while $durationhours > 0
{
  $hoursinday = $hours["dayoftheweek"];
  if( $hoursinday > $durationhours )
  {
     $endtime = $durationhours+$day["starttime"];
  }
  else 
  {
     $durationhours = $durationhours = $hoursinday;
  }
}

Funziona?

    
risposta data 11.12.2012 - 18:29
fonte
0

Quello che puoi fare è il seguente:

Mantieni il fuso orario di Columbia come predefinito quando utilizzi questa funzione.

  1. prendi una serie di date che trascorrono le vacanze e salti tutte le date per utilizzare questo.
  2. controlla se è sabato, quindi tieni solo le ore limitate che desideri.
  3. per tutti gli altri giorni mantieni l'orario di lavoro nei calcoli.
        a) per i giorni feriali / il sabato si dovranno verificare orari tra le 7:00 e le 17:00 e le 07:00 e le 14:00 e le condizioni e il ciclo di ciascun incremento dei minuti e anche la condizione per verificare la durata. Questo è tutto.

Il suo bit è stato detto semplicemente ma senza codice, questo è sufficiente.

    
risposta data 27.12.2012 - 07:47
fonte

Leggi altre domande sui tag