Просто используя строки, для меня это хорошее решение, меньше проблем с mysql. Обнаруживает текущий формат и при необходимости меняет его, это решение предназначено только для испанского / французского формата и английского формата без использования функции php datetime.
class dateTranslator {
public static function translate($date, $lang) {
$divider = '';
if (empty($date)){
return null;
}
if (strpos($date, '-') !== false) {
$divider = '-';
} else if (strpos($date, '/') !== false) {
$divider = '/';
}
//spanish format DD/MM/YYYY hh:mm
if (strcmp($lang, 'es') == 0) {
$type = explode($divider, $date)[0];
if (strlen($type) == 4) {
$date = self::reverseDate($date,$divider);
}
if (strcmp($divider, '-') == 0) {
$date = str_replace("-", "/", $date);
}
//english format YYYY-MM-DD hh:mm
} else {
$type = explode($divider, $date)[0];
if (strlen($type) == 2) {
$date = self::reverseDate($date,$divider);
}
if (strcmp($divider, '/') == 0) {
$date = str_replace("/", "-", $date);
}
}
return $date;
}
public static function reverseDate($date) {
$date2 = explode(' ', $date);
if (count($date2) == 2) {
$date = implode("-", array_reverse(preg_split("/\D/", $date2[0]))) . ' ' . $date2[1];
} else {
$date = implode("-", array_reverse(preg_split("/\D/", $date)));
}
return $date;
}
USE
dateTranslator::translate($date, 'en')
Ошибка довольно понятна. Ваш временной ряд, однако вы его создали, не имеет сезонных циклов или менее 2 сезонных циклов. (Это может не указывать, что данные являются не сезонными, возможно, вы неправильно создали samplets
.) Например, я могу воспроизвести ошибку, имея временные ряды с 7 квартальными наблюдениями, что явно не два полных полных сезонных цикла:
R> TS <- ts(1:7, frequency = 4)
R> decompose(TS)
Error in decompose(TS) : time series has no or less than 2 periods
R> TS
Qtr1 Qtr2 Qtr3 Qtr4
1 1 2 3 4
2 5 6 7
Аналогично, если я не укажу какую-либо субгоновую частоту (т. е. frequency = 1
в вызове ts()
, создавая ваш объект временного ряда samplets
[который по умолчанию]) Я получаю ту же ошибку:
R> TS <- ts(1:7)
R> decompose(TS)
Error in decompose(TS) : time series has no or less than 2 periods
В любом случае это указывает на то, что вы неправильно создали свой "ts"
объект, не указав правильные аргументы frequency
или deltat
или у вас есть временные ряды недостаточной длины (количество лет) для покрытия двух полных сезонных циклов.
Пожалуйста, прочтите ?ts
более подробно, чтобы убедиться, что вы правильно создаете samplets
. Если вам нужна дополнительная помощь, опубликуйте воспроизводимый пример.