Вы можете сравнить даты с классом PHP DateTime
:
$date = new DateTime($event['date']);
$now = new DateTime();
if($date < $now) {
echo 'date is in the past';
}
Примечание. Использование класса DateTime
предпочтительнее strtotime()
, поскольку последнее будет работать только для дат до 2038 года. Подробнее о Year_2038_problem .
Так как RelaxNG был упомянут в ответе Alnitak, вот решение с RelaxNG (язык, который является, в большинстве случаев, лучше, чем Схема W3C). Действительно отметьте ИЛИ (|) в определении элемента:
start = document
document = element document {elem+}
elem = element elem {ref | value}
ref = attribute ref {text}
value = attribute value {xsd:integer}
Если у меня есть этот XML-файл:
<document>
<elem value="1" />
<elem ref="something else" />
</document>
% rnv attributes-exclusive.rnc attributes-exclusive.xml
attributes-exclusive.xml
% xmllint --noout --relaxng attributes-exclusive.rng attributes-exclusive.xml
attributes-exclusive.xml validates
Если я добавляю в XML-файле:
<elem value="1" ref="something else" />
Я получаю ошибки проверки, как я хочу (действительно обратите внимание, что сообщения об ошибках являются субоптимальными):
% rnv attributes-exclusive.rnc attributes-exclusive.xml
attributes-exclusive.xml
attributes-exclusive.xml:4:0: error: attribute ^ref not allowed
required:
after
% xmllint --noout --relaxng attributes-exclusive.rng attributes-exclusive.xml
attributes-exclusive.xml:4: element elem: Relax-NG validity error : Invalid attribute value for element elem
attributes-exclusive.xml fails to validate
К сожалению, AFAIK, Вы не можете сделать этого с XML-схемой, у меня была та же проблема самого.
Я видел, что это предположило это при необходимости в обоих из:
<elem type="xxx">
<elem ref="yyy">
затем <elem>
самостоятельно должен быть разделен на два типа, так как они ясно получили различные атрибуты...
Вы не можете сделать с атрибутами, но Вы можете с дочерними элементами...
<element name="elem">
<complexType>
<choice>
<element name="value"/>
<element name="ref"/>
</choice>
</complexType>
</element>
Таким образом, Вы можете иметь...
<elem>
<value>1</value>
</elem>
или...
<elem>
<rel>something else</rel>
</elem>