PHP DatePeriod在午夜前后带时间,只有日期

问题描述

我需要找到两次无日期之间的15分钟间隔,如果两次都在00:00之前,那么一切都很好。我正在传递类似17:0023:0001:30这样的时间。

午夜之后的问题当然是另一天,所以这就是失败的原因。我想知道是否有一种方法可以找到间隔而不考虑,因为结束时间可以是任何时间。在午夜之前或之后,因此添加真实日期可能不是理想的选择,仅在午夜之后的几个小时内没有其他事情了。

$period = new DatePeriod(
    new DateTime("17:00"),new DateInterval('PT15M'),new DateTime("01:00")
    );

Fiddle

不返回任何内容,将不胜感激。

解决方法

由于仅使用时间部分,因此日期将自动设置为当前日期。这使得结束时间小于开始时间。

但是,如果您使用真实的日期(那并不重要),然后在1点钟选择第二天...

$period = new DatePeriod(
    new DateTime("1970-01-01 17:00"),new DateInterval('PT15M'),new DateTime("1970-01-02 01:00")
    );
    
foreach ($period as $date) {
    echo $date->format("H:i").' - ';
}

hth

,

如果结束时间比开始时间短,除了结束时间增加1天外,我看不到其他任何选择。

package javaapplication48;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class JavaApplication48 {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        frame.setSize(500,500);
        frame.setVisible(true);

        JLabel label = new JLabel();
        label.setText("<html>"
                + " <p class=\"fasz\">"
                + "        <p style=\"text-orientation:  sideways-right;writing-mode: vertical-rl\">"
                + " Picsa"
                + " </p>"
                + "</html>");
        frame.add(label);
        label.setBounds(0,200,200);
        
        JLabel ctrl =new JLabel();
        ctrl.setText("<html>"
                + " <p class=\"fasz\">"
                + "        <p style=\"color:red\">"
                + " Picsa"
                + " </p>"
                + "</html>");
        ctrl.setBounds(0,300);
        frame.add(ctrl);
        ctrl.updateUI();
    }

}