Crie campos de data para rastrear datas únicas ou intervalos de datas com suporte a fuso horário
Os campos personalizados de data permitem que você armazene datas únicas ou intervalos de datas para registros. Eles suportam o tratamento de fusos horários, formatação inteligente e podem ser usados para rastrear prazos, datas de eventos ou qualquer informação baseada em tempo.
Exemplo Básico
Crie um campo de data simples:
mutation CreateDateField {
createCustomField(input: {
name: "Deadline"
type: DATE
}) {
id
name
type
}
}
Exemplo Avançado
Crie um campo de data de vencimento com descrição:
mutation CreateDueDateField {
createCustomField(input: {
name: "Contract Expiration"
type: DATE
isDueDate: true
description: "When the contract expires and needs renewal"
}) {
id
name
type
isDueDate
description
}
}
Parâmetros de Entrada
CreateCustomFieldInput
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
String! | ✅ Sim | Nome exibido do campo de data |
type |
CustomFieldType! | ✅ Sim | Deve ser DATE |
isDueDate |
Boolean | Não | Se este campo representa uma data de vencimento |
description |
String | Não | Texto de ajuda exibido para os usuários |
Nota: Campos personalizados são automaticamente associados ao projeto com base no contexto do projeto atual do usuário. Nenhum projectId é necessário.
Definindo Valores de Data
Os campos de data podem armazenar uma única data ou um intervalo de datas:
Data Única
mutation SetSingleDate {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
startDate: "2025-01-15T10:00:00Z"
endDate: "2025-01-15T10:00:00Z"
timezone: "America/New_York"
}) {
id
customField {
value # Contains { startDate, endDate, timezone }
}
}
}
Intervalo de Datas
mutation SetDateRange {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
startDate: "2025-01-01T09:00:00Z"
endDate: "2025-01-31T17:00:00Z"
timezone: "Europe/London"
}) {
id
customField {
value # Contains { startDate, endDate, timezone }
}
}
}
Evento de Dia Todo
mutation SetAllDayEvent {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
startDate: "2025-01-15T00:00:00Z"
endDate: "2025-01-15T23:59:59Z"
timezone: "Asia/Tokyo"
}) {
id
customField {
value # Contains { startDate, endDate, timezone }
}
}
}
Parâmetros SetTodoCustomFieldInput
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
todoId |
String! | ✅ Sim | ID do registro a ser atualizado |
customFieldId |
String! | ✅ Sim | ID do campo personalizado de data |
startDate |
DateTime | Não | Data/hora de início no formato ISO 8601 |
endDate |
DateTime | Não | Data/hora de término no formato ISO 8601 |
timezone |
String | Não | Identificador de fuso horário (por exemplo, "America/New_York") |
Nota: Se apenas startDate for fornecido, endDate automaticamente será definido para o mesmo valor.
Formatos de Data
Formato ISO 8601
Todas as datas devem ser fornecidas no formato ISO 8601:
2025-01-15T14:30:00Z- hora UTC2025-01-15T14:30:00+05:00- Com deslocamento de fuso horário2025-01-15T14:30:00.123Z- Com milissegundos
Identificadores de Fuso Horário
Use identificadores de fuso horário padrão:
America/New_YorkEurope/LondonAsia/TokyoAustralia/Sydney
Se nenhum fuso horário for fornecido, o sistema usará o fuso horário detectado do usuário.
Criando Registros com Valores de Data
Ao criar um novo registro com valores de data:
mutation CreateRecordWithDate {
createTodo(input: {
title: "Project Milestone"
todoListId: "list_123"
customFields: [{
customFieldId: "date_field_id"
value: "2025-02-15" # Simple date format
}]
}) {
id
title
customFields {
id
customField {
name
type
value # Date values are accessed here
}
}
}
}
Formatos de Entrada Suportados
Ao criar registros, as datas podem ser fornecidas em vários formatos:
| Formato | Exemplo | Resultado |
|---|---|---|
| ISO Date | "2025-01-15" |
Single date (start and end same) |
| ISO DateTime | "2025-01-15T10:00:00Z" |
Single date/time |
| Date Range | "2025-01-01,2025-01-31" |
Start and end dates |
Campos de Resposta
Resposta TodoCustomField
| Campo | Tipo | Descrição |
|---|---|---|
id |
ID! | Identificador único para o valor do campo |
uid |
String! | String de identificador único |
customField |
CustomField! | A definição do campo personalizado (contém os valores de data) |
todo |
Todo! | O registro ao qual esse valor pertence |
createdAt |
DateTime! | Quando o valor foi criado |
updatedAt |
DateTime! | Quando o valor foi modificado pela última vez |
Importante: Valores de data (startDate, endDate, timezone) são acessados através do campo customField.value, não diretamente no TodoCustomField.
Estrutura do Objeto de Valor
Valores de data são retornados através do campo customField.value como um objeto JSON:
{
"customField": {
"value": {
"startDate": "2025-01-15T10:00:00.000Z",
"endDate": "2025-01-15T17:00:00.000Z",
"timezone": "America/New_York"
}
}
}
Nota: O campo value é do tipo CustomField, não do TodoCustomField.
Consultando Valores de Data
Ao consultar registros com campos personalizados de data, acesse os valores de data através do campo customField.value:
query GetRecordWithDateField {
todo(id: "todo_123") {
id
title
customFields {
id
customField {
name
type
value # For DATE type, contains { startDate, endDate, timezone }
}
}
}
}
A resposta incluirá os valores de data no campo value:
{
"data": {
"todo": {
"customFields": [{
"customField": {
"name": "Deadline",
"type": "DATE",
"value": {
"startDate": "2025-01-15T10:00:00.000Z",
"endDate": "2025-01-15T10:00:00.000Z",
"timezone": "America/New_York"
}
}
}]
}
}
}
Inteligência de Exibição de Data
O sistema formata automaticamente as datas com base no intervalo:
| Cenário | Formato de Exibição |
|---|---|
| Single date | Jan 15, 2025 |
| All-day event | Jan 15, 2025 (sem hora exibida) |
| Same day with times | Jan 15, 2025 10:00 AM - 5:00 PM |
| Multi-day range | Jan 1 → Jan 31, 2025 |
Detecção de dia todo: Eventos de 00:00 a 23:59 são automaticamente detectados como eventos de dia todo.
Tratamento de Fuso Horário
Armazenamento
- Todas as datas são armazenadas em UTC no banco de dados
- As informações de fuso horário são preservadas separadamente
- A conversão ocorre na exibição
Melhores Práticas
- Sempre forneça o fuso horário para precisão
- Use fusos horários consistentes dentro de um projeto
- Considere as localizações dos usuários para equipes globais
Fusos Horários Comuns
| Região | ID do Fuso Horário | Deslocamento UTC |
|---|---|---|
| US Eastern | America/New_York |
UTC-5/-4 |
| US Pacific | America/Los_Angeles |
UTC-8/-7 |
| UK | Europe/London |
UTC+0/+1 |
| EU Central | Europe/Berlin |
UTC+1/+2 |
| Japan | Asia/Tokyo |
UTC+9 |
| Australia Eastern | Australia/Sydney |
UTC+10/+11 |
Filtragem e Consulta
Os campos de data suportam filtragem complexa:
query FilterByDateRange {
todos(filter: {
customFields: [{
customFieldId: "date_field_id"
dateRange: {
startDate: "2025-01-01T00:00:00Z"
endDate: "2025-12-31T23:59:59Z"
}
operator: EQ # Returns todos whose dates overlap with this range
}]
}) {
id
title
}
}
Verificando Campos de Data Vazios
query FilterEmptyDates {
todos(filter: {
customFields: [{
customFieldId: "date_field_id"
values: null
operator: IS # Returns todos with no date set
}]
}) {
id
title
}
}
Operadores Suportados
| Operador | Uso | Descrição |
|---|---|---|
EQ |
Com dateRange | A data se sobrepõe ao intervalo especificado (qualquer interseção) |
NE |
Com dateRange | A data não se sobrepõe ao intervalo |
IS |
Com values: null |
O campo de data está vazio (startDate ou endDate é nulo) |
NOT |
Com values: null |
O campo de data tem um valor (ambas as datas não são nulas) |
Permissões Necessárias
| Ação | Permissão Necessária |
|---|---|
| Create date field | OWNER or ADMIN role at company or project level |
| Update date field | OWNER or ADMIN role at company or project level |
| Set date value | Standard record edit permissions |
| View date value | Standard record view permissions |
Respostas de Erro
Formato de Data Inválido
{
"errors": [{
"message": "Invalid date format. Use ISO 8601 format",
"extensions": {
"code": "CUSTOM_FIELD_VALUE_PARSE_ERROR"
}
}]
}
Campo Não Encontrado
{
"errors": [{
"message": "Custom field not found",
"extensions": {
"code": "NOT_FOUND"
}
}]
}
Limitações
- Sem suporte a datas recorrentes (use automações para eventos recorrentes)
- Não é possível definir hora sem data
- Sem cálculo embutido de dias úteis
- Intervalos de datas não validam automaticamente fim > início
- A precisão máxima é até o segundo (sem armazenamento de milissegundos)
Recursos Relacionados
- Visão Geral de Campos Personalizados - Conceitos gerais de campos personalizados
- API de Automações - Crie automações baseadas em datas