Add IntlCalendar::setDate() and IntlCalendar::setDateTime()

This commit is contained in:
Máté Kocsis 2023-07-09 14:02:48 +02:00
parent 1126232053
commit f236eb83b4
5 changed files with 123 additions and 0 deletions

View file

@ -437,6 +437,10 @@ class IntlCalendar
*/ */
public function set(int $year, int $month, int $dayOfMonth = UNKNOWN, int $hour = UNKNOWN, int $minute = UNKNOWN, int $second = UNKNOWN) {} // TODO make return type void public function set(int $year, int $month, int $dayOfMonth = UNKNOWN, int $hour = UNKNOWN, int $minute = UNKNOWN, int $second = UNKNOWN) {} // TODO make return type void
public function setDate(int $year, int $month, int $dayOfMonth): void {}
public function setDateTime(int $year, int $month, int $dayOfMonth, int $hour, int $minute, ?int $second = null): void {}
/** /**
* @return true * @return true
* @alias intlcal_set_first_day_of_week * @alias intlcal_set_first_day_of_week

View file

@ -408,6 +408,58 @@ U_CFUNC PHP_FUNCTION(intlcal_set)
RETURN_TRUE; RETURN_TRUE;
} }
U_CFUNC PHP_METHOD(IntlCalendar, setDate)
{
zend_long year, month, day;
CALENDAR_METHOD_INIT_VARS;
object = getThis();
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), object, "Olll",
&object, Calendar_ce_ptr, &year, &month, &day) == FAILURE) {
RETURN_THROWS();
}
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(year, 1);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(month, 2);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(day, 3);
CALENDAR_METHOD_FETCH_OBJECT;
co->ucal->set((int32_t) year, (int32_t) month, (int32_t) day);
}
U_CFUNC PHP_METHOD(IntlCalendar, setDateTime)
{
zend_long year, month, day, hour, minute, second = 0;
bool second_is_null = true;
CALENDAR_METHOD_INIT_VARS;
object = getThis();
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), object, "Olllll|l!",
&object, Calendar_ce_ptr, &year, &month, &day, &hour, &minute, &second, &second_is_null) == FAILURE) {
RETURN_THROWS();
}
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(year, 1);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(month, 2);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(day, 3);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(hour, 4);
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(minute, 5);
CALENDAR_METHOD_FETCH_OBJECT;
if (second_is_null) {
co->ucal->set((int32_t) year, (int32_t) month, (int32_t) day, (int32_t) hour, (int32_t) minute);
} else {
ZEND_VALUE_ERROR_OUT_OF_BOUND_VALUE(second, 6);
co->ucal->set((int32_t) year, (int32_t) month, (int32_t) day, (int32_t) hour, (int32_t) minute, (int32_t) second);
}
}
U_CFUNC PHP_FUNCTION(intlcal_roll) U_CFUNC PHP_FUNCTION(intlcal_roll)
{ {
zval *zvalue; zval *zvalue;

View file

@ -0,0 +1,30 @@
--TEST--
Test IntlCalendar::setDateTime()
--EXTENSIONS--
intl
--FILE--
<?php
$intlcal = IntlCalendar::createInstance('UTC');
$intlcal->clear();
$intlcal->set(2012, 1, 29, 23, 58);
var_dump($intlcal->isSet(IntlCalendar::FIELD_SECOND));
var_dump($intlcal->get(IntlCalendar::FIELD_MINUTE));
var_dump($intlcal->isSet(IntlCalendar::FIELD_SECOND));
$intlcal->clear();
$intlcal->setDateTime(2012, 1, 29, 23, 58);
var_dump($intlcal->isSet(IntlCalendar::FIELD_SECOND));
var_dump($intlcal->get(IntlCalendar::FIELD_MINUTE));
var_dump($intlcal->isSet(IntlCalendar::FIELD_SECOND));
?>
--EXPECT--
bool(false)
int(58)
bool(true)
bool(false)
int(58)
bool(true)

View file

@ -0,0 +1,17 @@
--TEST--
Test IntlCalendar::setDate()
--EXTENSIONS--
intl
--FILE--
<?php
$intlcal = IntlCalendar::createInstance('UTC');
$intlcal->clear();
$intlcal->setDate(2012, 1, 29);
var_dump($intlcal->getTime(), strtotime('2012-02-29 00:00:00 +0000') * 1000.);
?>
--EXPECT--
float(1330473600000)
float(1330473600000)

View file

@ -0,0 +1,20 @@
--TEST--
Test IntlCalendar::setDateTime()
--EXTENSIONS--
intl
--FILE--
<?php
//two minutes to midnight!
$intlcal->setDateTime(2012, 1, 29, 23, 58);
var_dump($intlcal->getTime(), strtotime('2012-02-29 23:58:00 +0000') * 1000.);
$intlcal->setDateTime(2012, 1, 29, 23, 58, 31);
var_dump($intlcal->getTime(), strtotime('2012-02-29 23:58:31 +0000') * 1000.);
?>
--EXPECT--
float(1330559880000)
float(1330559880000)
float(1330559911000)
float(1330559911000)