Converter data para Formato da API - ISO 8601 - RESOLVIDO

A API com qual estou trabalhando exige uma data no seguinte formato:
Example: startTime=2020-01-01T00:01:00Z - The ISO 8601 datetime (inclusive) from which to include records into the results. Only UTC time zone is accepted.

Assim, quando passo a data de hoje, iniciando a 00:00:00 e finalizando 23:59:59 ela funciona perfeitamente. Mas a idéia é que o usuário possa filtrar por data, por isso, criei uma aplicação de controle.

Nessa Aplicação de Controle, no qual coloquei 2 campos: startTime e endTime
então no evento OnValidadeSucess, inseri:

if ((sc_date_empty({startTime})) || (sc_date_empty({endTime})))
{
sc_error_message(“Dados inválidos”);
}
else
{
// chamando a Blank que irá autenticar e trazer as informações da API
sc_redir(function_get_activity.php, [startT]={startTime}; [endT]={endTime}, “_blank”);
}
// assim envio como parametro [startT] e [endT]

Agora que vem a Questão
A API exige o forma citado acima e no OnExecute da Blank estou tentando converter as datas das variáveis [startT] e [endT], mas sem sucesso.

[startT] = date(‘Y-m-d\TH:i:s’) . ‘Z’;
[endT] = date(‘Y-m-d\TH:i:s’) . ‘Z’;

Preciso inserir na URL as datas que vem do Controle para a busca na API, aí o problema, pois desta forma não funciona:
https://api.xxx.xxxx/$phone_id?startTime=[startT]&endTime=[endT]”,

Mas assim funciona:
https://api.xxx.xxxx/$phone_id?startTime=2024-02-01T00:00:00Z&endTime=2024-02-05T23:59:59Z” (Se eu não passar os parâmetros de data, ele sempre trás dados da data de hoje também)

quando dou echo [startT], a data vem formatada corretamente: 2024-02-06T21:31:07Z, mas não trás a data escolhida no controle, trás apenas a data e hora atual.

Tentei também usando uma função:
function convertTimeIso($datetime) {
return gmdate(‘Y-m-d\TH:i:s’) . ‘Z’;
}

chamando ela assim:
$startTime = convertTimeIso(’[startT]’);
$endTime = convertTimeIzo(’[endT]’);
e na URL
https://api.xxx.xxxx/$phone_id?startTime=$startTime&endTime=$endTime

Também sem sucesso… alguém já trabalhou com esse formato?
Já pesquisei em diversos fóruns e mesmo o Manual do PHP, mas não consegui, onde posso estar errando?

Citei apenas um exemplo de como tentei, mas já são alguns dias tentando uma solução e com isso acumulei diversas tentativas, como podem ver abaixo.

mas se alguém puder, me ajudar, fico muito grato.

Tentativas sem sucesso
// date_default_timezone_set(‘America/Sao_Paulo’);
// $data = date(‘Y-m-d h:i:s’);
// $startTime = date("[startTime]");
// $endTime = date("[endTime]");

// $formatStart = "Y-m-d\T00:00:00\Z";
// $formatEnd 	 = "Y-m-d\T23:59:59\Z";
// $startTime 	 = gmdate("[startTime]" $formatStart);
// $endTime 	 = gmdate("[endTime]" $formatEnd);

// gmdate(string $format, ?int $timestamp = null): string

// Exibe algo como: 2000-07-01T00:00:00+00:00
// echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
// $startTime 	= date(DATE_ATOM, mktime("[startTime"]));
// $endTime 	= date(DATE_ATOM, mktime("[endTime]"));


// $startTime = new DateTime('[startT]');
// date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// echo $startTime->format(DateTimeInterface::ATOM); // Updated ISO8601
// echo "<br>";
// $endTime = new DateTime('[endT]');
// date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// echo $endTime->format(DateTimeInterface::ATOM); // Updated ISO8601


// 	$startTime = "[startT]";
// 	date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// 	$startTime 	= gmdate('Y-m-d\TH:i:s\Z P');

// 	$endTime = "[endT]";
// 	date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// 	$endTime 	= gmdate('Y-m-d\TH:i:s\Z P');

// 	echo $startTime;
// 	echo "<br>";
// 	echo $endTime;

// 	$dateStringStart = '[startTime]'; 
// 	$start = strtotime($dateStringStart);
// 	date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// 	$startTime = gmdate('Y-m-d\TH:i:s\Z P', $start);
// 	echo $startTime;

// 	echo "<br>";

// 	$dateStringEnd = '[endTime]'; 
// 	$end = strtotime($dateStringEnd);
// 	date_default_timezone_set('America/Sao_Paulo'); // GMT -3
// 	$endTime = gmdate('Y-m-d\TH:i:s\Z P', $end);
// 	echo $endTime;


	// $startTime 	= gmdate("Y-m-d\T00:00:00\Z");
	// $endTime 	= gmdate("Y-m-d\T23:59:59\Z");
// 2018-10-08T00%3A00%3A00
// 2024-02-01T14:32:16Z +00:00
// 2024-02-01T00:01:00Z -- essa é a saída exigida
// 2024-02-06T14:03:40Z
// 2023-03-29T05:54:21+0000
// 2023-03-29T05:54:21+00:00

// $isoDate = gmdate('Y-m-d\TH:i:s') . 'Z'; // outputs: 2017-10-18T23:04:17.000Z
// echo $isoDate;
// $startTimer = $isoDate;

// echo [startT];
// echo "<br>";
// echo [endT];

// [startT] = date('Y-m-d\TH:i:s') . 'Z';
// [endT] 	 = date('Y-m-d\TH:i:s') . 'Z';
// echo [startT];
// echo "<br>";
// echo [endT];

// $startTimer = [startT];
// $endTimer 	= [endT];

// $startTimer = convertTimeIso('[startT]');
// $endTimer 	= convertTimeIzo('[endT]');

Concatene as strings desta forma e tente:

“https://api.xxx.xxxx/$phone_id?startTime=".[startT]."&endTime=".[endT];

@Kleyber antes de mais nada, muito obrigado, estou fazendo os testes e a sua dica já deu certo… mas ainda não estou conseguindo enviar por parâmetro as variáveis com sc_redir.

Veja só, a variável [startT], por exemplo, preciso pegar a data que está nela e converter, fiz assim:

if ((sc_date_empty({startTime})) || (sc_date_empty({endTime})))
{
sc_error_message(“Dados inválidos”);
}
else
{
{startTime} = sc_date_conv({startTime},“dd/mm/aaaa”,“aaaammdd”);
//gerando formato da API
{startTime} = date(“Y-m-d\TH:i:s\Z”, strtotime({startTime}));

{endTime} = sc_date_conv({endTime},"dd/mm/aaaa","aaaammdd");
//gerando formato da API
{endTime} = date("Y-m-d\TH:i:s\Z", strtotime({endTime})); 

sc_redir(function_get_activity.php, [startT]={startTime}; [endT]={endTime}, "_blank");

}

Dando echo nas duas variáveis, perfeito, está no formato que a API exige:

[startT] = {startTime};
echo [startT];
[endT] = {endTime};
echo [endT];

Mas isso funciona na Aplicação de Controle, as datas não estão indo como parâmetro, só funcionou inserindo elas manualmente na BLANK, fiz assim para testar a sua URL:

[startT] = "2024-02-01T00:00:00Z"; //datas geradas pela conversão do Controle
echo [startT];
echo "<br>";
[endT] = "2024-02-02T00:00:00Z";  //datas geradas pela conversão do Controle
echo [endT];

Ou seja, o formato está correto, a URL com a sua dica funciona perfeitamente, filtra nas datas, mas no sc_redir, ela não envia as datas passadas nos parâmetros:

acredito que esteja errando aqui, mas já tentei várias opções, menos a correta, é claro:
sc_redir(function_get_activity.php, [startT]={startTime}; [endT]={endTime}, “_blank”)

testei assim - aspas simples:
sc_redir(function_get_activity.php, [startT]=’{startTime}’; [endT]=’{endTime}’, “_blank”)

e assim - aspas duplas:
sc_redir(function_get_activity.php, [startT]="{startTime}"; [endT]="{endTime}", “_blank”)

Tudo isso claro, colocando as variáveis como saída na App de Controle e de Entrada na Blank.

É porque estás mandando a variável global como parâmetro. Tente assim:

sc_redir(function_get_activity.php, startT={startTime}; endT={endTime}, “_blank”)

@Kleyber, muito grato pelo apoio, eu de fato estava enviando errado. Fiz o redir conforme sua orientação e funcionou perfeitamente. Vlwwwwwww :pray:

   if ((sc_date_empty({startTime})) || (sc_date_empty({endTime}))){
      sc_error_message("Dados inválidos");}
   else{
      date_default_timezone_set('America/Sao_Paulo'); // GMT -3
      {startTime} = sc_date_conv({startTime},"dd/mm/aaaa","aaaammdd");
      {startTime} = date("Y-m-d\T00:00:00\Z", strtotime({startTime})); 
      [startT] = {startTime};

      {endTime} = sc_date_conv({endTime},"dd/mm/aaaa","aaaammdd");
      {endTime} = date("Y-m-d\T23:59:59\Z", strtotime({endTime}));
      [endT] = {endTime};

      sc_redir(function_get_activity.php, startT={startTime}; endT={endTime}, "_blank");}
1 Curtida

Podes até melhorar o código, pois pelo que vi não precisas mais definir as variáveis globais. Então o teu código pode ficar assim:

 if ((sc_date_empty({startTime})) || (sc_date_empty({endTime}))){
      sc_error_message("Dados inválidos");
}else{
      date_default_timezone_set('America/Sao_Paulo'); // GMT -3
      {startTime} = sc_date_conv({startTime},"dd/mm/aaaa","aaaammdd");
      {startTime} = date("Y-m-d\T00:00:00\Z", strtotime({startTime})); 

      {endTime} = sc_date_conv({endTime},"dd/mm/aaaa","aaaammdd");
      {endTime} = date("Y-m-d\T23:59:59\Z", strtotime({endTime}));

      sc_redir(function_get_activity.php, startT={startTime}; endT={endTime}, "_blank");
}

@Kleyber a principio fiz desta forma, ou seja, sem a global, mas não funcionou. Na Blank tentei pegar o parâmetro startT via Get, mas não consegui de jeito nenhum:

	 if (!isset($_GET['startT'])) {
	 	echo "Global startT não encontrado na URL";
	 }else{
	 	echo "SUCESSO, startT ENCONTRADO";
	 } 

Aí como já faz muito tempo que estou nisso, a Global me resolveu.
Mas pensando agora, só se na Blank a gente ajustasse a criação da URL:

esta espera uma global:
https://api.xxx.xxxx/$phone_id?startTime=".[startT]."&endTime=".[endT];

Para algo assim?
https://api.xxx.xxxx/$phone_id?startTime=".startT."&endTime=".endT;