2012-06-27 28 views
9

Tôi có một mã mà tôi phải "tròn" đến phút thấp nhất.Php: DateTime: làm thế nào để thiết lập chỉ giây (không giờ không phút)

  • 16:05:00 nên trở thành 16:05:00
  • 16:05:01 nên trở thành 16:05:00
  • 16:05:29 nên trở thành 16:05:00
  • 16:05:30 nên trở thành 16:05:00
  • 16:05:31 nên trở thành 16:05:00
  • 16:05:59 nên trở thành 16:05:00

Tôi muốn sử dụng đối tượng DateTime. Không có các chức năng như:

  • setHours()
  • setMinutes()
  • setSeconds()

Đây là sự khởi đầu của mã của tôi:

$my_date=DateTime::createFromFormat(
    'Y-m-d H:i:s', 
    $bd_date 
); 
$my_date->setTimezone(self::$TimeZone); 

Bây giờ tôi muốn thiết phần "giây" bằng không.

Bạn có một cách thanh lịch chỉ đặt phút theo cách tôi muốn?

Nota: Tôi không tìm kiếm giải pháp như "chia cho getTime() 60, chuyển đổi thành số nguyên, sau đó nhân với 60". Tôi đang tìm một giải pháp chung để thiết lập giây, không chỉ là "0".

Trả lời

20

Có phải là setTime trang nhã không?

$my_date->setTime ($my_date->format("H"), $my_date->format("i"), $new_second_val); 
$my_date->setTime ($my_date->format("H"), $new_minute_val, $new_second_val); 
// etc... 
+0

Perfect giải pháp;) –

+0

... và âm thanh rất hiệu quả;) – Chuck

+0

Đó là cách hiệu quả nhất để SET giờ và phút trên một DateTime vật. Ngoài ra, 'định dạng' là cách tài liệu duy nhất để trích xuất các giờ từ một DateTime. – wroniasty

6

Chỉ cần đặt giây để "00"

date_default_timezone_set('America/Sao_paulo'); 
$date = new DateTime(); 
echo $date->format('Y-m-d H:i:00'); 
+0

Tôi đã thử nhưng nó không hoạt động ... trả về false thay vì một đối tượng. –

+0

Điều này không có tác dụng, nếu bạn sử dụng createFromFormat(), vì giá trị đã cho là 2017-02-15 15:10:20. Vì vậy, các giây không được phân tích cú pháp và gây ra hàm không trả về một đối tượng DateTime –

+0

Tôi vừa thử nghiệm với createFromFormat() và nó đã làm việc –

Các vấn đề liên quan