Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Totalecommerce 2009

Como pego o numero de dias de 2 data x um valor

Recommended Posts

Ola meu amigos

 

Preciso saber como fasso para fazer uma opção para um site que estou fazendo esta função vai ser assim.

( è um site de Hoteis )

 

O Hospede escolhe uma acomodação e na hora de reservar vai ter 2 campos ENTRADA e SAIDA quando ele clicar em reservar vai aparecer uma tela com o valor total a pagar pois na acomodação já tem o seu valor ele deve somar pelo numero de dias EX: 80,00 x 5 Dias = 400,00 ( Dias que deu de uma data a outra ) ai em uma campo aparece o valor total e abaixo ele vai pagar 25% deste valor então o sistema tem que exibir para pagamento na hora os 25% do valor total.

 

espero que tenham entendido

 

Meu socorro é sempre vocês que são os mestres

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você já estiver utilizando PHP 5.3 fica fácil:

 

$tz = new DateTimeZone( 'America/Sao_Paulo' );

$di = DateTime::createFromFormat( 'd/m/Y' , '05/06/2010' , $tz ); //entrada dia 5/6
$df = DateTime::createFromFormat( 'd/m/Y' , '10/06/2010' , $tz ); //saída dia 10/6

echo $df->diff( $di )->d , ' dias';

 

A saída será:

5 dias

 

Você consegue também fazer a conta, levando em consideração a hora de entrada e saída:

$tz = new DateTimeZone( 'America/Sao_Paulo' );

$di = DateTime::createFromFormat( 'd/m/Y H:i:s' , '05/06/2010 20:00:00' , $tz ); //entrada dia 5/6 às 20h
$df = DateTime::createFromFormat( 'd/m/Y H:i:s' , '10/06/2010 12:00:00' , $tz ); //saída dia 10/6 às 12h

$diff = $df->diff( $di );

echo $diff->d , ' dias e ' , $diff->h , ' horas.';

 

A saída:

4 dias e 16 horas.

 

Agora, se não estiver usando o 5.3, dê uma procurada aqui no fórum porque existem vários códigos para fazer isso.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como fasso para somar pelo valor?

 

 

vou tentar explicar como vai acontecer.

Quando o hospede do hotel acessa uma acomodação ele clica em reservar vai abrir um formulario onde já carrega o nome eo valor da diaria desta acomodação Ex: Apartamento Simples Diaria: R$ 80,00

Tera os 2 campo Entrada e saida ( sera com um calendario nos 2 ( lembre-se que o hospede nunca vai pegar a data do dia pois ele pode querer ir para o hotel daqui a 15 ou 20 dias é destes campos que sai o numero de dias vezes o valor da diaria somando o total que sra exibido na pagina e enviado para o banco de dados e nesta pagina vai ter o valor total - 25% = Resultado o valor que ele vai pagar de entrada na quele momento por deposito, pagseguro etc...

 

Eu copiei o codigo que você passou mas da erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso que você quer?

 

 

$tz = new DateTimeZone( 'America/Sao_Paulo' );

$di = DateTime::createFromFormat( 'd/m/Y' , '05/06/2010' , $tz ); //entrada dia 5/6
$df = DateTime::createFromFormat( 'd/m/Y' , '10/06/2010' , $tz ); //saída dia 10/6
$dias=($df->diff( $di )->d)
$valor=$dias*$diaria;
$valor_final=$valor-(0.25*$valor);
echo "$valor_final";

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso que você quer?

 

 

$tz = new DateTimeZone( 'America/Sao_Paulo' );

$di = DateTime::createFromFormat( 'd/m/Y' , '05/06/2010' , $tz ); //entrada dia 5/6
$df = DateTime::createFromFormat( 'd/m/Y' , '10/06/2010' , $tz ); //saída dia 10/6
$dias=($df->diff( $di )->d)
$valor=$dias*$diaria;
$valor_final=$valor-(0.25*$valor);
echo "$valor_final";

Amigo deu este erro:

Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\hotel\teste.php on line 24

 

Colei o codigo assim:

 

<?
$tz = new DateTimeZone( 'America/Sao_Paulo' );
$di = DateTime::createFromFormat( 'd/m/Y' , '05/06/2010' , $tz ); //entrada dia 5/6
$df = DateTime::createFromFormat( 'd/m/Y' , '10/06/2010' , $tz ); //saída dia 10/6
$dias=($df->diff( $di )->d)
$valor=$dias*$diaria;
$valor_final=$valor-(0.25*$valor);
echo "$valor_final";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu André! è que eu copiei e colei o código do joão e tirei essa parte do echo! Ai nao vi que faltava o ponto e virgula!

 

Deu certo totalecommerce 2009?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei oponto e virgula e aparece este erro:

Fatal error: Call to undefined method DateTime::createfromformat() in C:\xampp\htdocs\hotel\teste.php on line 23

Como o João já disse:

 

Se você já estiver utilizando PHP 5.3 fica fácil:

Ou seja, o seu PHP não é >= 5.3.0. Atualize ele que irá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

André mesmo ele atualizando, tem como você mostrar como se faz em versões anteriores?

 

Se ele quiser saber o número total de dias, não levando em consideração as horas, a forma mais simples é utilizar a função gregoriantojd(), ficaria assim:

 

//Dados de entrada
$de = 5; //Dia
$me = 6; //Mês
$ae = 2010; //Ano

//Dados de saída
$ds = 10; //Dia
$ms = 6; //Mês
$as = 2010; //Ano

//Total de dias
$dias = gregoriantojd( $ms , $ds , $as ) - gregoriantojd( $me , $de , $ae );
$diaria = 80;

printf( 'Dias: %d' , $dias );
printf( 'Diaria: R$ %.02f' , $diaria );
printf( 'Total: R$ %.02f' , $dias * $diaria );

 

A saída:

Dias: 5

Diaria: R$ 80.00

Total: R$ 400.00

 

Agora, você também pode fazer algumas contas, se quiser:

<?php
date_default_timezone_set( 'America/Sao_Paulo' );

/**
* Calcula a diferença entre duas datas
* @param string $di Data inicial
* @param string $df Data final
* @param string $format Formato das duas datas, mesmo utilizado por strftime
* @return array Returna uma matriz contendo os seguintes dados:
*				 years...: Total de anos que se passaram
*				 months..: Total de meses que se passaram
*				 days....: Total de dias que se passaram
*				 hours...: Total de horas que se passaram
*				 minutes.: Total de minutos que se passaram
*				 seconds.: Total de segundos que se passaram
*/
function dateDiff( $di , $df , $format = '%d/%m/%Y %H:%M:%S' ){
$pi = strptime( $di , $format );
$pf = strptime( $df , $format );
$rt = array(
	'years'		=> 0,
	'months'	=> 0,
	'days'		=> 0,
	'hours'		=> 0,
	'minutes'	=> 0,
	'seconds'	=> 0
);

$ti = mktime( $pi[ 'tm_hour' ] , $pi[ 'tm_min' ] , $pi[ 'tm_sec' ] , $pi[ 'tm_mon' ] + 1 , $pi[ 'tm_mday' ] , $pi[ 'tm_year' ] + 1900 );
$tf = mktime( $pf[ 'tm_hour' ] , $pf[ 'tm_min' ] , $pf[ 'tm_sec' ] , $pf[ 'tm_mon' ] + 1 , $pf[ 'tm_mday' ] , $pf[ 'tm_year' ] + 1900 );

$df = $tf - $ti;

if ( $df >= 31536000 ){
	$rt[ 'years' ] += (int) ( $df / 31536000 );
	$df -= $rt[ 'years' ] * 31536000;
}

if ( $df >= 2592000 ){
	$rt[ 'months' ] += (int) ( $df / 2592000 );
	$df -= $rt[ 'months' ] * 2592000;
}

if ( $df >= 86400 ){
	$rt[ 'days' ] += (int) ( $df / 86400 );
	$df -= $rt[ 'days' ] * 86400;
}

if ( $df >= 3600 ){
	$rt[ 'hours' ] += (int) ( $df / 3600 );
	$df -= $rt[ 'hours' ] * 3600;
}

if ( $df >= 60 ){
	$rt[ 'minutes' ] += (int) ( $df / 60 );
	$df -= $rt[ 'minutes' ] * 60;
}

$rt[ 'seconds' ] += $df;

return $rt;
}

var_dump( dateDiff( '05/06/2010 20:00:00' , '10/06/2010 12:00:00' ) );

 

A saída:

array(6) {
 ["years"]=>
 int(0)
 ["months"]=>
 int(0)
 ["days"]=>
 int(4)
 ["hours"]=>
 int(16)
 ["minutes"]=>
 int(0)
 ["seconds"]=>
 int(0)
}

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pssoal este codigo abaixo deu certinho e bem como eu queri, vocês são d+ mas só um duvida como faço para ter o valor sobre a porcentagem Ex: no script o valor da 400,00 mas eu quero fazer o seguinte pelo admin o operador decide se vai usar 5% 10% 15% 40% ou 50% do falor para pagamento antecipado vamos dizer que ele vai pagar 50% então o outro resultado apareceria Total a pagar: 200,00

 

<?
//Dados de entrada
$de = 5; //Dia
$me = 6; //Mês
$ae = 2010; //Ano

//Dados de saída
$ds = 10; //Dia
$ms = 6; //Mês
$as = 2010; //Ano

//Total de dias
$dias = gregoriantojd( $ms , $ds , $as ) - gregoriantojd( $me , $de , $ae );
$diaria = 80;
printf( 'Dias: %d' , $dias );
printf( 'Diaria: R$ %.02f' , $diaria );
printf( 'Total: R$ %.02f' , $dias * $diaria );
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo, agora acho que você já consegue terminar, veja:

 

1. Você já tem o número de dias.

2. Você já tem o valor total da hospedagem.

3. Você tem a porcentagem que será necessário pagar na entrada.

 

Sobrou apenas uma "continha" simples http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://pt.wikipedia.org/wiki/Percentagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos não deu olhem

 

<?
//Dados de entrada
$de = 5; //Dia
$me = 6; //Mês
$ae = 2010; //Ano

//Dados de saída
$ds = 10; //Dia
$ms = 6; //Mês
$as = 2010; //Ano

//Total de dias
$dias = gregoriantojd( $ms , $ds , $as ) - gregoriantojd( $me , $de , $ae );
$diaria = 80;

printf( 'Dias: %d' , $dias );
printf( 'Diaria: R$ %.02f' , $diaria );
printf( 'Total: R$ %.02f' , $dias * $diaria );

$percentual = 15.0 / 100.0; // 15%
$valor_final = $diaria - ($percentual * $total);
echo "O valor final do produto é: " . $valor_final;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

No lugar de $total devia ser $diaria

 

Na verdade não @falcao544, ele realmente precisará de uma variável $total que conterá o valor da $diaria multiplicada pelo total de $dias que o hospede ficará.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Totalecommerce 2009 não flood o fórum,

 

Caso ainda não tenha lido as Regras do Fórum e as Orientações para uma boa participação, sugiro que o faça.

 

 

05ª - Post UP!

Favor não postar mensagens com o objetivo de evidenciar o tópico, tornando-o primeiro da lista de tópicos (up), tal como mensagens repetitivas e/ou que não condizem com o assunto do tópico em questão (flood).

 

Seu post anterior foi excluído por esse motivo.

 

Para resolver por conta própria, leia os posts #12, #13, #15 e #17, a resposta ao seu problema estará ai. Agora, caso precise de suporte particular, consulte o Mercado iMasters ou abra uma Oferta para Freelancers.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.