diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
index ec999a10b96ea86a8a5daa4b24cd1419bdbd3ffd..41fa69660654f7913ef4ebdfc059ed2b928e5ed7 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
@@ -1135,7 +1135,7 @@ TZFIELD%CUNITS = TRIM(YUNITS)
 call IO_Field_create_nc4( tpfile, tzfield, kvarid = ivarid, hcalendar = 'standard' )
 !
 ! Compute the temporal distance from reference
-CALL DATETIME_DISTANCE(TZREF,TPDATA,ZDELTATIME)
+ZDELTATIME = TPDATA - TZREF
 
 ! Write the data
 istatus = NF90_PUT_VAR(TPFILE%NNCID, IVARID, ZDELTATIME)
@@ -1194,7 +1194,7 @@ call IO_Field_create_nc4( tpfile, tzfield, kshape = Shape( tpdata), kvarid = iva
 ALLOCATE( ZDELTATIME( SIZE( TPDATA ) ) )
 
 DO JI = 1, SIZE( TPDATA )
-  CALL DATETIME_DISTANCE( TZREF, TPDATA(JI ), ZDELTATIME(JI) )
+  ZDELTATIME(JI) = TPDATA(JI) - TZREF
 END DO
 
 ! Write the data
@@ -2541,7 +2541,7 @@ subroutine Write_time_coord( tdim, hlongname, tpdates, tpdates_bound )
   use modd_time_n,     only: tdtmod
   use modd_type_date,  only: date_time
 
-  use mode_datetime,   only: Datetime_distance
+  use mode_datetime
   use mode_field,      only: Find_field_id_from_mnhname
 
   type(tdimnc),                                       intent(in) :: tdim
@@ -2611,7 +2611,7 @@ subroutine Write_time_coord( tdim, hlongname, tpdates, tpdates_bound )
   ! Compute the temporal distance from reference
   Allocate( zdeltatimes_1d(Size( tpdates )) )
   do jt = 1, Size( tpdates )
-    call Datetime_distance( tzref, tpdates(jt), zdeltatimes_1d(jt) )
+    zdeltatimes_1d(jt) = tpdates(jt) - tzref
   end do
 
   ! Write the data
@@ -2636,10 +2636,7 @@ subroutine Write_time_coord( tdim, hlongname, tpdates, tpdates_bound )
 
     ! Compute the temporal distance from reference
     Allocate( zdeltatimes_2d(2, Size( tpdates_bound, 2 )) )
-    do jt = 1, Size( tpdates_bound, 2 )
-      call Datetime_distance( tzref, tpdates_bound(1, jt), zdeltatimes_2d(1, jt) )
-      call Datetime_distance( tzref, tpdates_bound(2, jt), zdeltatimes_2d(2, jt) )
-    end do
+    zdeltatimes_2d(:,:) = tpdates_bound(:,:) - tzref
 
     ! Write the data
     istatus = NF90_PUT_VAR( incid, ivarid, zdeltatimes_2d(:,:) )
diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90
index 4f47a066c3a41574f3a78b5fee0d8693ae7a8326..9be79181bbd54031878ed5272d45de3bb8cfaeed 100644
--- a/src/MNH/adv_forcingn.f90
+++ b/src/MNH/adv_forcingn.f90
@@ -197,10 +197,10 @@ ELSE
     JXP= JSX_ADV +1
     WRITE(UNIT=ILUOUT0,FMT='(" THE ADV FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_ADV,JXP
-    CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TDTADVFRC(JXP),ZSDTJX)
+    ZSDTJX = TDTADVFRC(JXP) - TDTADVFRC(JSX_ADV)
   END IF
 !
-  CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TPDTCUR,ZDT)
+  ZDT = TPDTCUR - TDTADVFRC(JSX_ADV)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index 786319656520529e294fae191e27f54da98ed0de..f3df15c99284e5cc9cb65fe07a1ece517a334a03 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -456,10 +456,10 @@ ELSE
     JXP= JSX +1
     WRITE(UNIT=ILUOUT0,FMT='(" THE FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX,JXP
-    CALL DATETIME_DISTANCE(TDTFRC(JSX),TDTFRC(JXP),ZSDTJX)
+    ZSDTJX = TDTFRC(JXP) - TDTFRC(JSX)
   END IF
 !
-  CALL DATETIME_DISTANCE(TDTFRC(JSX),TPDTCUR,ZDT)
+  ZDT = TPDTCUR - TDTFRC(JSX)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index a9f0a1b4cd0330376c1dc5ee7b00531aefeda52f..fd63b0efae399392d4867f25a39a282aa47b988e 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -764,7 +764,7 @@ CALL RESHAPE_SURF(IDIM1D)
 !
 ! call to have the cumulated time since beginning of simulation
 !
-CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC)
+ZTIMEC = TDTCUR - TDTSEG
 
 #ifdef CPLOASIS
 IF (LOASIS) THEN
diff --git a/src/MNH/les_ini_timestepn.f90 b/src/MNH/les_ini_timestepn.f90
index 98c5cd306456bf19b2839c9ee608448392c07078..27528b73d6166b2e8672a5e273f2352c1fdc8a2e 100644
--- a/src/MNH/les_ini_timestepn.f90
+++ b/src/MNH/les_ini_timestepn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -69,7 +69,7 @@ USE MODD_TIME
 USE MODD_CONF
 USE MODD_LES_BUDGET
 !
-use mode_datetime,       only: Datetime_distance
+use mode_datetime
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
@@ -146,7 +146,7 @@ NLES_TCOUNT = NLES_TCOUNT + 1
 NLES_CURRENT_TCOUNT = NLES_TCOUNT
 !
 tles_dates(nles_tcount) = tdtcur
-call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount) )
+xles_times(nles_tcount) = tdtcur - tdtseg
 !
 !* forward-in-time time-step
 !
diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90
index fa9b5f282212ea78f0fef1730930e40a07ec29c1..33c27c7cba718b4e54304d7f8d17cdf8f69064ac 100644
--- a/src/MNH/mnh2lpdm_ini.f90
+++ b/src/MNH/mnh2lpdm_ini.f90
@@ -114,8 +114,8 @@ CALL IO_Field_read(TPFILE1,'DTEXP',TZDTEXP1)
 CALL IO_Field_read(TPFILE1,'DTCUR',TZDTCUR1)
 CALL IO_Field_read(TPFILE2,'DTCUR',TZDTCUR2)
 !
-CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR1,ZECHEANCE1)
-CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR2,ZECHEANCE2)
+ZECHEANCE1 = TZDTCUR1 - TZDTEXP1
+ZECHEANCE2 = TZDTCUR2 - TZDTEXP1
 !
 IHHMDL=INT(TZDTEXP1%xtime/3600)
 IMNMDL=INT((TZDTEXP1%xtime-IHHMDL*3600)/60)
diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90
index 05ad22fd5d959b712927d25a307d6666aac493f0..96896087acadbe5d18a5e6e51318606f1b4718f6 100644
--- a/src/MNH/paspol.f90
+++ b/src/MNH/paspol.f90
@@ -332,9 +332,9 @@ IF (GPPFIRSTCALL) THEN
          TZDATE2%nyear=I2YY;TZDATE2%nmonth=I2MM;TZDATE2%nday=I2DD;TZDATE2%xtime=Z2SEC
          TZDATE3%nyear=I3YY;TZDATE3%nmonth=I3MM;TZDATE3%nday=I3DD;TZDATE3%xtime=Z3SEC
          TZDATE4%nyear=I4YY;TZDATE4%nmonth=I4MM;TZDATE4%nday=I4DD;TZDATE4%xtime=Z4SEC
-         CALL DATETIME_DISTANCE(TZDATE1,TZDATE2,ZT2)
-         CALL DATETIME_DISTANCE(TZDATE1,TZDATE3,ZT3)
-         CALL DATETIME_DISTANCE(TZDATE1,TZDATE4,ZT4)
+         ZT2 = TZDATE2 - TZDATE1
+         ZT3 = TZDATE3 - TZDATE1
+         ZT4 = TZDATE4 - TZDATE1
          !
          ! On met de cote le debut du rejet sous forme pratique ainsi
          ! que la chronologie relative.
@@ -474,7 +474,7 @@ DO JSV=1,NSV_PP
       !*    2.2 Distance temporelle DEPUIS le debut de rejet.
       !
       TZDATE%nyear=IDEBYY(JSV);TZDATE%nmonth=IDEBMM(JSV);TZDATE%nday=IDEBDD(JSV);TZDATE%xtime=ZDEBSS(JSV)
-      CALL DATETIME_DISTANCE(TZDATE,TDTCUR,ZDEPUIS)
+      ZDEPUIS = TDTCUR - TZDATE
       !
       !
       !* 2.3 Si la source emet.
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index ec037233cbe8673a3ba5815ece7f3839400a3e0b..d5db913bbe85d0ce6a6614966280b963334c91f7 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -648,7 +648,7 @@ IF (CRAD /='NONE') THEN
 !  test to see if the partial radiations for cloudy must be called
 !
   IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN
-    CALL DATETIME_DISTANCE(TDTRAD_CLONLY,TDTCUR,ZTEMP_DIST)
+    ZTEMP_DIST = TDTCUR - TDTRAD_CLONLY
     IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN
       TDTRAD_CLONLY = TDTCUR
       GRAD = .TRUE.
@@ -658,7 +658,7 @@ IF (CRAD /='NONE') THEN
 !   
 ! test to see if the full radiations must be called
 !   
-  CALL DATETIME_DISTANCE(TDTCUR,TDTRAD_FULL,ZTEMP_DIST)
+  ZTEMP_DIST = TDTRAD_FULL - TDTCUR
   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN
     TDTRAD_FULL = TDTCUR
     GRAD = .TRUE.
@@ -946,7 +946,7 @@ IF( CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
 !
   GDCONV = .FALSE.
 !
-  CALL DATETIME_DISTANCE(TDTDCONV,TDTCUR,ZTEMP_DIST)
+  ZTEMP_DIST = TDTCUR - TDTCUR
   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN
     TDTDCONV = TDTCUR
     GDCONV   = .TRUE.
diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90
index 88dcf383d5fe82cb419b2de7372bcc2b83a479f5..e901600ffd35e1d98ff81f137e6787d9de4b71b4 100644
--- a/src/MNH/rel_forcingn.f90
+++ b/src/MNH/rel_forcingn.f90
@@ -206,10 +206,10 @@ ELSE
     ILUOUT0 = TLUOUT0%NLU
     WRITE(UNIT=ILUOUT0,FMT='(" THE REL FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_REL,JXP
-    CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TDTRELFRC(JXP),ZSDTJX)
+    ZSDTJX = TDTRELFRC(JXP) - TDTRELFRC(JSX_REL)
   END IF
 !
-  CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TPDTCUR,ZDT)
+  ZDT = TPDTCUR - TDTRELFRC(JSX_REL)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/setlb_lg.f90 b/src/MNH/setlb_lg.f90
index bbdf91a69606292a347431757efb7364bc078968..5a02e8bd39f133c336055df45ab94c00b718eda2 100644
--- a/src/MNH/setlb_lg.f90
+++ b/src/MNH/setlb_lg.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2001-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -77,7 +77,7 @@ REAL         :: ZTEMP_DIST  ! time from the begining of simulation
 CALL GET_DIM_EXT_ll('B',IIU,IJU)
 IKU=SIZE(XZZ,3)
 !
-CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTEMP_DIST)
+ZTEMP_DIST = TDTCUR - TDTEXP
 !
 IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
   XLBXSVM(1,1:IJU,1:IKU,NSV_LGBEG)  = XXHATM(1) - ZTEMP_DIST * XLGSPEED
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index 01965dac9a64d8b875c7528347f723ccb1a7e6e9..d6d3247320da94b10b9e08f1899df68abd25f798 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -111,7 +111,7 @@ subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
   use modd_parameters,     only: NCOMMENTLGTMAX, NMNHNAMELGTMAX
   use modd_type_date,      only: date_time
 
-  use mode_datetime,       only: datetime_distance
+  use mode_datetime
   use mode_io_field_write, only: IO_Field_create, IO_Field_write
 #ifdef MNH_IOLFI
   use mode_menu_diachro,   only: Menu_diachro
@@ -201,9 +201,7 @@ subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
   !
       !Compute time at the middle of the temporally-averaged budget timestep
       !This time is computed from the beginning of the experiment
-      CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1))
-  !
-      ZWORKTEMP(1)=ZWORKTEMP(1)+(1.-NBUSTEP*0.5)*PTSTEP
+      ZWORKTEMP(1) = TPDTCUR - TDTEXP + (1.-NBUSTEP*0.5) * PTSTEP
   !
       tzdates(1)%nyear  = tdtexp%nyear
       tzdates(1)%nmonth = tdtexp%nmonth
@@ -222,9 +220,7 @@ subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
       !Note: tzdates are used only in LFI files; for netCDF files, dates are written in the coordinates
       allocate( tzdates(nbusubwrite) )
   !
-      CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(nbusubwrite))
-  !
-      ZWORKTEMP(nbusubwrite)=ZWORKTEMP(nbusubwrite)+(1.-NBUSTEP*0.5)*PTSTEP
+      ZWORKTEMP(nbusubwrite) = TPDTCUR - TDTEXP + (1.-NBUSTEP*0.5) * PTSTEP
   !
       tzdates(nbusubwrite)%nyear  = tdtexp%nyear
       tzdates(nbusubwrite)%nmonth = tdtexp%nmonth
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 439247b61a45512b19b62e17e3d5b8916f7bd2b4..6f186a2463124ad35a3bb7be749a7f775d6ed90d 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2023 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -173,7 +173,7 @@ use modd_time,           only: tdtexp, tdtseg
 use modd_time_n,         only: tdtmod
 use modd_type_date,      only: date_time
 
-use mode_datetime,       only: Datetime_distance
+use mode_datetime
 use mode_io_field_write, only: IO_Field_write, IO_Field_write_box
 use mode_menu_diachro,   only: Menu_diachro
 use mode_tools_ll,       only: Get_globaldims_ll
@@ -644,9 +644,7 @@ end if
 !Reconstitute old diachro format
 allocate( ztimes( size( tpdates ), 1 ) )
 
-do ji=1,size(tpdates)
-  call Datetime_distance( tdtexp, tpdates(ji ), ztimes(ji, 1 ) )
-end do
+ztimes(:, 1) = tpdates(:) - tdtexp
 
 call IO_Field_write( tzfile, tzfield, ztimes )
 
diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90
index f077da063ee88d5ac09c2cab1fbb89c8085b5113..7a62b3a9cb8713e249ea502ad4e248dcf39a3cc4 100644
--- a/src/MNH/write_ts1d.f90
+++ b/src/MNH/write_ts1d.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -160,8 +160,7 @@ CHARACTER(len=5)  :: YCTIME  ! current time
 TZFILE => NULL()
 NBPROF = 0
 
-CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTIME)
-ZTIME = ZTIME + TDTEXP%xtime
+ZTIME = TDTCUR - TDTEXP + TDTEXP%xtime
 CALL GET_DIM_EXT_ll ('B',IIU,IJU)
 
 IF ((CPROGRAM =='DIAG  ').AND.(LCHEMDIAG)) THEN