我是php新手。 我有2个日期,我从2个drupal字段获取,每个字段都保存在数据库中,具有自己的日期格式,所以格式:
$old_format_starts
- >具有此日期格式:date('Y-m-d H:i:s');
和
$old_format_ends
- >具有此日期格式:date('jS F Y H:i:s');
所以我使用以下代码:
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends = $entity->field_video_until[LANGUAGE_NONE][0]['value'];
之后,我将这些日期信息转换为这种日期格式:date('Y-m-d');像这样:
$starts = date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));
为了稍后我可以使用该信息进行比较,如果今天是在$开始和结束之间,如果今天是在这些日期之间,那么我将打印一些东西。
所以这是我正在使用的总代码,但我有日期格式的问题...我做错了,因为页面只是花了很长时间加载页面,最后它没有加载...当我使用WHILE bucle时,问题就出现了,因为我试图在WHILE之前使用代码并且页面以正常方式加载。所以我不知道如果我使用错误的WHILE
BUCLE或strtotime
函数或date
的格式......?
<?php
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends = $entity->field_video_until[LANGUAGE_NONE][0]['value'];
$starts = date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));
$to= date("Y-m-d", strtotime($to));
$i = date("Y-m-d", strtotime($starts));
while ($i <= $ends) {
if ($i==$to) {
print date('Y-m-d', strtotime($i));
break;
}
$i=date("Y-m-d", strtotime('+1 day', $i));
}
?>
我真的尝试过很多方法..但是没有成功......这里是相同的代码,但使用FOR bucle ......也没有成功..
<?php
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends = $entity->field_video_until[LANGUAGE_NONE][0]['value'];
$starts = date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));
$to= date("Y-m-d");
for ($i = $starts; $i <= $ends; $i++) {
if ($i==$to) {
print $i;
break;
}
}
?>
请帮助!!!!欢迎任何消化!必须有一个解决方案...我在布局(While)
或(FOR)
做错了,因为页面没有加载!!!
谢谢!!! :)
答案 0 :(得分:2)
如果您直接比较strtotime()
值,它会起作用。 strtotime()
返回简单整数,>/</=
类型比较将按预期工作。在您的代码中,您使用date()
将它们转换为字符串,这是以最低有效值优先排序,因此您的比较将无法按预期工作。
使用strtotime()
比较日期:
$start = strtotime($old_format_starts);
$end = strtotime($old_format_ends);
$today = time();
if ($today > $start && $today < $end) {
// code
}
使用DateTime
类比较日期:
$start = new DateTime($old_format_starts);
$end = new DateTime($old_format_ends);
if ($today > $start && $today < $end) {
// code
}
比较结束后,您可以使用date()
函数(如果您使用的是strtotime()
)或format()
方法(如果您使用的是{{}格式化日期字符串1}} class)。
答案 1 :(得分:1)
此处不需要while循环 我建议使用DateTime本机类,如下所示:
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends = $entity->field_video_until[LANGUAGE_NONE][0]['value'];
$starts = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_starts);
$ends = DateTime::createFromFormat('jS F Y H:i:s', $old_format_ends);
$today = new DateTime() ;
if(($today > $start) && ($today < $end)){
//Do your thing
}
答案 2 :(得分:0)
您还可以使用简单的PHP日期类进行比较。
例如:
$date = new simpleDate();
if($date->now()->compare($start)->isAfter() && $date->now()->compare($end)->isBeforeOrEqaul()) {
//code here.
}
还有其他有用的方法。请check the tutorials page。