Tijd tussen twee afspraken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer

Functieomschrijving Ben jij klaar voor de volgende stap in jouw carrière? Kom werken bij dit kleine softwarebureau en werk aan de gaafste maatwerk projecten. Je komt te werken in een klein development team en werk nauw samen met elkaar, om maatwerk software te leveren en bij te dragen aan bedrijfsautomatiseringen. Je gaat werken met de Microsoft stack en technieken als .NET, C#, Entity, MVC, SQL server. In de functie krijg je veel vrijheid om zelf beslissingen te nemen en je hebt impact op de bedrijfsprocessen. Bedrijfsprofiel Dit familiebedrijf bestaat al ruim 20 jaar. Zij hebben een vast netwerk van klanten,

Bekijk vacature »

Fullstack Software Developer

Functieomschrijving Voor een ambitieuze werkgever in regio Roosendaal zijn wij op zoek naar een Full Stack C#.NET Developer. Als software programmeur ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Verder ontwikkelen en onderhouden van webapplicaties, dashboards en apps voor de eigen IOT-oplossingen; Testen en goedkeuren van de software; Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks,

Bekijk vacature »

Senior developer (PHP en VB.NET)

Functie De development afdeling bestaat uit 2 teams. Het productteam (10 developers) is verantwoordelijk voor verschillende applicaties met als doel om zoveel mogelijk te automatiseren en uit te werken tot standaard software. Met diverse Solutions Architecten en ervaren developers denken ze voortdurend mee met hun klanten en bouwen ze de basis van het uiteindelijke maatwerk dat wordt geleverd. Hiernaast hebben ze een maatwerk/projectteam. Dit team bestaat momenteel uit 8 developers (junior tot senior) en is verantwoordelijk voor het maatwerk in hun klantprojecten. Momenteel zijn ze op zoek naar een senior developer die aan de slag gaat in het productteam. Hierin

Bekijk vacature »

Typescript Developer / Cloud platform

Dit ga je doen (Door)Ontwikkelen van het cloud platform; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het cloud platform; Sparren met de business. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er veel voor. Als Typescript ontwikkelaar word je onderdeel van het team gericht op de (door)ontwikkeling van hun eigen cloud platform welke wordt

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Software Developer Java

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Senior Airport Developer ( System engineer)

De functie Nice to know (you) De nieuwe A-pier wordt de duurzaamste van Schiphol. Als deze af is ligt er 4000 vierkante meter zonnepanelen op het dak. En de toiletten? Die spoelen door met regenwater. we gaan ervoor: het creëren van de meest duurzame en hoogwaardige luchthavens ter wereld. een toekomstbestendig en duurzaam Schiphol. Daar werken we elke dag hard aan in team Development & Sustainability. Jij bent regisseur, expert én aanjager van de ontwikkeling van Schiphol. Connecting your world Hoe maak je de ambities en doelstellingen van Schiphol concreet in een project? De waarde voor Schiphol naar eisen die

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Freelance Fullstack Java Developer

Functieomschrijving Voor een opdrachtgever in omgeving Rotterdam zijn wij op zoek naar ervaren Fullstack JAVA Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid hebben

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

Bekijk vacature »

Ervaren Full stack developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house functie bij een bedrijf met enorme groeipotentie? Ben jij op zoek naar een nieuwe uitdaging vol afwisseling en gezelligheid? Dan ben je bij dit bedrijf aan het juiste adres! Wij zijn in omgeving Breda op zoek naar een ervaren full stack developer. Je gaat werken voor een zeer gewilde werkgever met goede arbeidsvoorwaarden. Je krijgt een plekje in het jonge IT team, work hard, play hard is hier duidelijk het motto! Jouw werkzaamheden zien er als volgt uit: Jij bent verantwoordelijk voor het ontwerpen en bouwen van webapplicaties. Je bent

Bekijk vacature »
Peter Brok

Peter Brok

22/05/2021 23:39:27
Quote Anchor link
Ik heb in een tabel rows met een begintijd en een eindtijd. Door deze van elkaar af trekken heb ik een periode. Deze geef ik weer in een tabel, het zijn afspraken in een kalender.

Nu wil de tijd berekenen tussen de eindtijd van de ene row en de begintijd van de volgende row. Hierdoor wil ik bepalen hoeveel tijd er tussen de twee afspraken zit. Dit om te bepalen of er nog een afspraak tussen kan.

Moet ik dit in PHP regelen of in sql? Tot nu toe is het mij niet gelukt om dit te berekenen.

Hieronder wat ik nu heb, de begin en eindtijd komen er per row wel uit, maar op deze manier trek ik de verkeerde getallen van elkaar. Appointment_begin en end zijn datumnotaties, dus in seconden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql_appointments = $conn->query('
SELECT appointment_begin, appointment_end
FROM appointment
WHERE employeeID = ' . $conn->quote(2) . 'ORDER BY appointment_begin');

                      while ($row_salon_appointments = $sql_salon_appointments->fetch(PDO::FETCH_ASSOC))
                          {

                           $aa = $row_salon_appointments['appointment_begin']);

                            
                       $bb date('Y-m-d H:i', $row_salon_appointments['appointment_end']);
                        
                           $cc = $bb - $aa;    

                           }
 
PHP hulp

PHP hulp

20/04/2024 14:00:27
 
Ad Fundum

Ad Fundum

23/05/2021 08:50:20
Quote Anchor link
Het hangt er van af welke database je gebruikt.

MySQL en MariaDB kunnen niet omgaan met periodes. Ze kennen geen INTERVAL als gegevenstype.
Dat betekent dat je met deze databases, voor zoiets triviaals het wiel al wéér zelf mag gaan uitvinden.
Je kunt dat omslachtig doen in SQL, maar je kunt het ook omslachtig doen in PHP, dat maakt niet veel uit.
De meesten rommelen dan wat aan met seconden per uur et cetera, maar uiteindelijk is het heel ingewikkeld om het helemaal goed te krijgen. Vanwege veranderende tijdzones en schrikkeljaren en schrikkelseconden.

Als je Postgres gebruikt, krijg je na het berekenen van het verschil tussen twee datums gewoon een INTERVAL gegevenstype, waarmee al het rekenwerk al voor je is gedaan, zoals het hoort in een database.
Je kunt je dan bezighouden met de vraag wat je wilt maken, in plaats van hoe je dat voor elkaar kunt krijgen.
Gewijzigd op 23/05/2021 08:57:13 door Ad Fundum
 
Adoptive Solution

Adoptive Solution

24/05/2021 14:22:50
Quote Anchor link
Daar zullen ze bij MySQL en MariaDB van opkijken.

https://mariadb.com/kb/en/date-and-time-units/
https://mariadb.com/kb/en/timediff/

Triviaal voorbeeld :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT aanvang, einde, TIME_FORMAT( TIMEDIFF( einde,aanvang ), "%k uur %i minuten" ) AS duur FROM afspraken;


Maar de vraag was hoe je het verschil berekent tussen eindtijd van een regel en de begintijd van de volgende regel.

Bijvoorbeeld in een lus in PHP :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
for ($i = 0; $i < count; $i++) {
    echo $row[$i+1]['aanvang'] - $row[$i]['einde'] . '<br />';
}


Toevoeging op 24/05/2021 17:46:51:

Om de vragensteller op weg te helpen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<table>

<thead>
    <tr>
        <th>Einde (huidige row)</th>
        <th>Aanvang (volgende row)</th>
        <th>Duur</th>
    </tr>
</thead>

<?php
// aangenomen aanvang en einde zelfde dag
$afspraken = [];
while ( $row = $result->fetch_object() )
{

    $afspraken[] = $row;
    //echo '<pre>' . print_r( $afspraken, TRUE ) . '</pre>';
}
for ( $i = 0; $i < count($afspraken); $i++)
{

    // verder uitwerken aanvang volgende row vroeger/later einde huidige row
    //echo '<pre>' . print_r($row, TRUE ) . '</pre>';

    $einde = new DateTime( $afspraken[$i]->einde );
    if ($i < count($afspraken) )
    {

        $aanvang  = new DateTime( $afspraken[$i+1]->aanvang );
        $verschil = $einde->diff($aanvang);
    }

    echo '<tr><td>' .
        $einde->format('H:i') .
        '</td><td>' .
        $aanvang->format('H:i') .
        '</td><td>' .
        $verschil->format('%H:') .
        str_pad($verschil->format('%i'),2,"0",STR_PAD_LEFT) .
        '</td></tr>';
}

?>


</table>
Gewijzigd op 24/05/2021 17:47:53 door Adoptive Solution
 
Ad Fundum

Ad Fundum

25/05/2021 09:35:05
Quote Anchor link
Het is zeker leuk dat het voorbeeld lijkt te werken met de twee functies TIME_FORMAT() en TIMEDIFF().
Toch ligt het anders (helaas).

TIMEDIFF() is gemaakt om verkeerde uitkomsten te geven als de data niet klopt of als de twee datums te ver uit elkaar liggen:
Quote:
"The result returned by TIMEDIFF() is limited to the range allowed for TIME values."

En over TIME values wordt gezegd:
Quote:
"TIME values may range from '-838:59:59' to '838:59:59'."

Het meest slecht is dat de verwachte uitkomst stilzwijgend wordt veranderd naar iets dat MySQL past:
Quote:
"By default, values that lie outside the TIME range but are otherwise valid are clipped to the closest endpoint of the range. [...] Note that because '00:00:00' is itself a valid TIME value, there is no way to tell, from a value of '00:00:00' stored in a table, whether the original value was specified as '00:00:00' or whether it was invalid."

Het precieze gedrag van TIMEDIFF() wordt ook nog eens beïnvloed door het niet goed ondersteunen van tijdzones en globale serverinstellingen als ALLOW_INVALID_DATES.
Rekenen met tijd in MySQL is dus weinig consequent en weinig betrouwbaar.

Helaas biedt MySQL geen andere opties om met een INTERVAL te werken. Een INTERVAL onthoudt het aantal kalendermaanden, weken, dagen, etc. De enige manier is om te rekenen met seconden, die geen rekening houden met schrikkeljaren, schrikkelseconden, kalendermaanden of tijdzones:
Quote:
"Alternatively, you can use either of the functions TIMESTAMPDIFF() and UNIX_TIMESTAMP(), both of which return integers."

Nu was er ooit, 15 jaar geleden, een slim iemand die vroeg om het INTERVAL datatype te ondersteunen.
Maar daar is nooit wat mee gedaan.
Wat moet je dan nog met MySQL?

Dan het alternatief in PHP, is dat zoveel beter?
Mijn ervaring is dat DateTime in PHP 4 niet eens werkte, en alleen maar foute resultaten gaf.
Uit de lange maar ook recente lijst van bugs valt op te maken dat het nog steeds niet altijd betrouwbaar is:
https://bugs.php.net/search.php?cmd=display&project=PHP&order_by=id&direction=DESC&limit=30&package_name[]=Date%2Ftime+related
Ik zou het niet in een productie-omgeving durven te gebruiken.

Maar waarom zou je ook blijven aanmodderen en steeds het wiel weer opnieuw uitvinden, als je in plaats daarvan IntlCalendar kunt gebruiken, of een fatsoenlijke database als Postgres (eigenlijk alles behalve MySQL/MariaDB) ?
Gewijzigd op 25/05/2021 09:43:56 door Ad Fundum
 
Jan R

Jan R

26/05/2021 07:54:40
Quote Anchor link
Mogelijks zou je ook iets kunnen doen met een self-join
select * from tbl t1 join tbl t2 where ???

Hier moeten we de exacte structuur hebben
maar iets zoals zelfde medewerker en later maar vroegste uur dan deze afspraak

Net zelf zoiets gedaan voor vervolg van gesprek.
 
Peter Brok

Peter Brok

27/05/2021 23:47:45
Quote Anchor link
Bedankt allemaal, ik heb alles over tijd met belangstelling gelezen. Het is het volgende geworden en het werkt! Niet zelf bedacht! :-;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

$sql_appointments
= $conn->query("
SELECT appointment_begin
FROM appointments
WHERE appointment_begin >= $appointment_beginID AND employeeID = $employeeID
ORDER BY appointment_begin
LIMIT 1"
);

$row_appointments = $sql_appointments->fetch(PDO::FETCH_ASSOC);

$start_free_time = $row_appointments['appointment_begin'];
$end_free_time = $appointment_beginID;

$result_free_time = $start_free_time - $end_free_time ;

$result_free_time_minutes = ($result_free_time/60) - $duration_total;

if($start_free_time <> "") {
  if( $result_free_time_minutes < 0) {    
    ?>

    <div class="alert">
    <span class="closebtn" onclick="location.href='index.php';" >&times;</span>
    <strong>Let op!</strong> Deze afspraak is te lang voor de beschikbare tijd.
    Druk p het kruisje om terug te gaan.
    </div>
    <?php ; } ?>


Edit:
Code-tag gefixxed. Bracket miste in de tag.
Gewijzigd op 28/05/2021 00:38:12 door - Ariën -
 
Ivo P

Ivo P

28/05/2021 12:31:07
Quote Anchor link
Wat nu als er geen volgende appointment gevonden wordt door die query?
 
Jan R

Jan R

28/05/2021 13:06:31
Quote Anchor link
Dank krijg je null en weet je ook wat te doen :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.