diff --git a/src/transformer/utils/get_attempt_duration.php b/src/transformer/utils/get_attempt_duration.php
index 366241ca765954ccb4438f391d8afa8334ae06c7..55b1fe910a3cb87b651b10f04f4e765426a98021 100644
--- a/src/transformer/utils/get_attempt_duration.php
+++ b/src/transformer/utils/get_attempt_duration.php
@@ -18,10 +18,11 @@ namespace src\transformer\utils;
 defined('MOODLE_INTERNAL') || die();
 
 function get_attempt_duration($attempt) {
-    if (isset($attempt->timefinish)) {
+    if (isset($attempt->timefinish) && isset($attempt->timestart)) {
         $seconds = $attempt->timefinish - $attempt->timestart;
-        return "PT".(string) $seconds."S";
-    } else {
-        return null;
+        if ($seconds > 0) {
+            return "PT".(string) $seconds."S";
+        }
     }
+    return null;
 }
diff --git a/src/transformer/utils/get_attempt_result.php b/src/transformer/utils/get_attempt_result.php
index faeec7efc70227986eca2acc3e4e7316e4a717ac..08eb9c007f1930a66bc419996120854bd49e2b60 100644
--- a/src/transformer/utils/get_attempt_result.php
+++ b/src/transformer/utils/get_attempt_result.php
@@ -31,7 +31,7 @@ function get_attempt_result(array $config, $attempt, $gradeitem) {
     $success = $gradesum >= $passscore;
     $duration = get_attempt_duration($attempt);
 
-    return [
+    $result = [
         'score' => [
             'raw' => $rawscore,
             'min' => $minscore,
@@ -40,6 +40,11 @@ function get_attempt_result(array $config, $attempt, $gradeitem) {
         ],
         'completion' => $completed,
         'success' => $success,
-        'duration' => $duration,
     ];
+
+    if ($duration != null) {
+        $result['duration'] = $duration;
+    }
+
+    return $result;
 }