2014-01-13 4 views
2

У меня есть HTML форма с двумя входамиПолучить разницу дат формы

<input type="datetime" name="start" id="start" ></input> 
<input type="datetime" name="stop" id="stop" ></input> 

и send.php, которые почт мне содержимое формы.

В send.php Я хочу рассчитать разницу между днями между STOP и START, как в разнице = STOP - START. Если разница между временами положительна и больше 1 часа, то я хочу добавить один дополнительный день.

If START = 02/01/2014 14:58:21 
If STOP = 07/01/2014 14:59:21 

затем выход = 5 дней

If START = 02/01/2014 14:58:21 
If STOP = 07/01/2014 14:59:21 

затем выход = 6 дней

Как я могу добиться этого?

Send.php должен отправить по почте результат.

Так что в моем .html я что-то вроде

<form action="send.php" method="get"> 

<div id="datetimepicker" class="input-append date"> 
<input type="datetime" name="START" id="START" ></input> 
<span class="add-on"> 
<i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> 
</span> 
</div> 

<div id="datetimepicker" class="input-append date"> 
<input type="datetime" name="STOP" id="STOP" ></input> 
<span class="add-on"> 
<i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> 
</span> 
</div> 
</form> 


and my send.php is 

<?php 
@$pfw_ip= $_SERVER['REMOTE_ADDR']; 

@$START= $_GET['START']; 
@$STOP= $_GET['STOP']; 
@$email= addslashes($_GET['email']); 

$_start = new DateTime($_POST['start']); // or new DateTime($_POST['start']); 
$_stop = new DateTime($_POST['stop']);// or new DateTime($_POST['stop']); 
$interval = $_start->diff($_stop); 

$to = "[email protected]"; 
$subject = "Calculator"; 
$headers = "From: $email\r\n"; 
$headers .= "Reply-To: $email\r\n"; 
$headers .= "Return-Path: $email\r\n"; 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
$message = "<html><body style=\"font-family:Calibri; font-size:14.5px;\">"; 
$message .= " result between $STOP and $START is ....days 
ID: $pfw_ip <br/>"; 
$message .= "</body></html>"; 
mail($to,$subject,$message,$headers); 
?> 


the error i get now is Catchable fatal error: Object of class DateInterval could not be converted to string in 

ответ

0

Если вы используете PHP> = 5.3

Используйте это:

$_start = new DateTime('02/01/2014 14:58:21'); // or new DateTime($_POST['start']); 
$_stop = new DateTime('02/05/2014 14:58:21'); // or new DateTime($_POST['stop']); 
$interval = $_start->diff($_stop); 
echo $interval->format('%a days'); // Should output "4 days". 

//for (-)ve and (+)ve values, use: 
echo $interval->format('%R%a days'); // Should output "+4 days". 

Таким образом, в вашем send.php должен выглядеть так:

<?php 
    $pfw_ip= $_SERVER['REMOTE_ADDR']; 
    $email= addslashes($_GET['email']); 
    // Calculating the difference 
    $_start = new DateTime($_GET['start']); 
    $_stop = new DateTime($_GET['stop']); 
    $interval = $_start->diff($_stop); 
    // Preparing email content 
    $to = "[email protected]"; 
    $subject = "Calculator"; 
    $headers = "From: $email\r\n"; 
    $headers .= "Reply-To: $email\r\n"; 
    $headers .= "Return-Path: $email\r\n"; 
    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
    $message = "<html><body style=\"font-family:Calibri; font-size:14.5px;\">"; 
    $message .= " result between $STOP and $START is ".$interval->format('%R%a days')." 
    ID: $pfw_ip <br/>"; 
    $message .= "</body></html>"; 
    mail($to,$subject,$message,$headers); 
?> 
+0

Много добрых спасибо, но если я ставлю этот код в HTML форме я потребуется р ass $ interval как переменная send.php, как это сделать? Плюс datetime1 и datetime2 являются двумя полями ввода, поэтому я не могу объявить их как статические ... –

+0

Назначьте ему переменную, что-то вроде '$ diff = $ interval-> format ('% a days');' Вы можете пройти '$ diff' для вашего send.php. Что касается вашего другого запроса, я добавил коды в комментарии рядом с ними. –

+0

Дорогой ох :). Я добавил свой полный код в исходное сообщение –

0

простой способ для преобразования даты в метку времени Unix

$start = strtotime($_POST['START']); 
$end = strtotime($_POST['END']); 
$interval = $end - $start; 

потому что ответы в секундах, вы можете сделать простой математику, чтобы получить количество дней

$days = $interval/86400 // number of seconds in a day 

вы также можете увидеть, если даты в течение часа

если ($ интервал> 3600), и так далее

+0

моя форма использует метод get, и если я добавлю в send.php $ stop = strtotime ($ _ POST ['stop']); он возвращает пустой –

+0

вместо $ _POST, с $ _GET или $ _REQUEST, который работает с обоими –

Смежные вопросы