{"record":{"id":"a3c3133153aeb34a","repo":"Budibase/budibase","slug":"invalid-format-for-field-columnname-colum-a3c313","errorCode":null,"errorMessage":"Invalid format for field \"${columnName}\": \"${columnData}\". Datetime fields must be in ISO format, e.g. \"YYYY-MM-DDTHH:MM:SSZ\".","messagePattern":"Invalid format for field \"(.+?)\": \"(.+?)\"\\. Datetime fields must be in ISO format, e\\.g\\. \"YYYY-MM-DDTHH:MM:SSZ\"\\.","errorType":"http","errorClass":"HTTPError","httpStatus":400,"severity":"error","filePath":"packages/server/src/utilities/schema.ts","lineNumber":196,"sourceCode":"      } else if (columnType === FieldType.DATETIME) {\n        if (columnData && !columnSchema.timeOnly) {\n          if (columnSchema.ignoreTimezones) {\n            if (!sql.utils.isValidISODateStringWithoutTimezone(columnData)) {\n              throw new HTTPError(\n                `Invalid format for field \"${columnName}\": \"${columnData}\". Datetime fields with ignoreTimezones must be in ISO format, e.g. \"YYYY-MM-DDTHH:MM:SS\".`,\n                400\n              )\n            }\n            parsedRow[columnName] = new Date(columnData.trim() + \"Z\")\n          } else {\n            if (!sql.utils.isValidISODateString(columnData)) {\n              let message = `Invalid format for field \"${columnName}\": \"${columnData}\".`\n              if (columnSchema.dateOnly) {\n                message += ` Date-only fields must be in the format \"YYYY-MM-DD\".`\n              } else {\n                message += ` Datetime fields must be in ISO format, e.g. \"YYYY-MM-DDTHH:MM:SSZ\".`\n              }\n              throw new HTTPError(message, 400)\n            }\n          }\n        }\n        if (columnData && columnSchema.timeOnly) {\n          if (!sql.utils.isValidTime(columnData)) {\n            throw new HTTPError(\n              `Invalid format for field \"${columnName}\": \"${columnData}\". Time-only fields must be in the format \"HH:MM:SS\".`,\n              400\n            )\n          }\n        }\n        parsedRow[columnName] = columnData\n      } else if (\n        columnType === FieldType.JSON &&\n        typeof columnData === \"string\"\n      ) {\n        parsedRow[columnName] = parseJsonExport(columnData)\n      } else if (columnType === FieldType.BB_REFERENCE) {","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/server/src/utilities/schema.ts#L178-L214","documentation":"An HTTP 400 thrown in packages/server/src/utilities/schema.ts when a value for a regular DATETIME column (no ignoreTimezones, not dateOnly at the point of message building) cannot be parsed into a valid date. The library requires ISO 8601 strings like \"YYYY-MM-DDTHH:MM:SSZ\"; for dateOnly columns the message instead suggests \"YYYY-MM-DD\". It guards against non-ISO strings that Date() would silently accept with unintended interpretations.","triggerScenarios":"Posting rows or importing CSV where a datetime column gets a US-format string (\"01/05/2024\"), a locale string (\"5 Jan 2024\"), a timestamp number, or a malformed ISO value that fails the parser, for a column without ignoreTimezones.","commonSituations":"CSV imports from spreadsheets that format dates as MM/DD/YYYY; REST integrations sending epoch millis as numbers coerced to strings; dateOnly columns receiving full timestamps (message variant); regional date formats from browser pickers pasted in.","solutions":["Convert the value to full ISO 8601 UTC with a Z suffix, e.g. new Date(x).toISOString().","For dateOnly columns, send exactly \"YYYY-MM-DD\".","Fix the source CSV/spreadsheet column format to ISO before import.","Ensure the value is a string, not a number/Date object, before posting."],"exampleFix":"// before\nrow[\"created\"] = \"01/05/2024\"\n// after\nrow[\"created\"] = new Date(\"2024-01-05T00:00:00Z\").toISOString() // \"2024-01-05T00:00:00.000Z\"","handlingStrategy":"validation","validationCode":"function toIso(value: unknown): string {\n  const d = value instanceof Date ? value : new Date(String(value))\n  if (isNaN(d.getTime())) throw new Error(`Not a date: ${String(value)}`)\n  return d.toISOString()\n}\nrow.created = toIso(rawInput)","typeGuard":"function isIsoDateTime(v: unknown): v is string {\n  return typeof v === \"string\" && !isNaN(new Date(v).getTime()) &&\n    /^\\d{4}-\\d{2}-\\d{2}(T[\\d:.]+Z?)?$/.test(v.trim())\n}","tryCatchPattern":"try {\n  await saveRow(row)\n} catch (e) {\n  if (e instanceof HTTPError && e.status === 400 && /must be in ISO format/.test(e.message)) {\n    row.created = new Date(row.created).toISOString()\n    await saveRow(row)\n  } else throw e\n}","preventionTips":["Always serialise dates with toISOString() before posting rows","Normalise spreadsheet/CSV date columns to ISO during import preprocessing","For dateOnly columns send exactly YYYY-MM-DD","Write an integration test that posts each datetime column with a sample value"],"tags":["validation","datetime","bad-request","iso8601"],"backgroundTag":"invalid-datetime-format","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}