Автор Тема: localtime и undefined value  (Прочитано 3901 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
localtime и undefined value
« : 02 Декабря 2005, 12:10:03 »
Почему скрипт выдает ошибку:
Can\'t call method "mday" on an undefined value at XX.pl line XX


#!/usr/bin/perl
use Time::localtime;
$y=2001;
$m=11;
@
monlens = (0,31,28,31,30,31,30,31,31,30,31,30,31);

$secy=((($y-1900)*365)-int($y/4))*24*60*60;

$secm=0;
for (
$i=1$i<=$m$i++) { $secm=$secm+$monlens[$i]; };
if (
$y%!= 0) {$secm--;};
$secm=$secm*24*60*60;

$secd=$monlens[$m]*24*60*60;

$first=$secy+$secm;

        
$tm=localtime($first);
        
$dd=$tm->mday$mm=$tm->mon+1$yy=$tm->year+1900;
        
$hh=$tm->hour$min=$tm->min;
        if (
$hh<10) {$hh="0$hh";};
        if (
$min<10) {$min="0$min";};
        if (
$mm<10) {$mm="0$mm";};
        if (
$dd<10) {$dd="0$dd";};
        
$fs="$hh:$min ($dd.$mm.$yy)";

 
$second=$secy+$secm+$secd;

        
$tm=localtime($second);
        
$dd=$tm->mday$mm=$tm->mon+1$yy=$tm->year+1900;
        
$hh=$tm->hour$min=$tm->min;
        if (
$hh<10) {$hh="0$hh";};
        if (
$min<10) {$min="0$min";};
        if (
$mm<10) {$mm="0$mm";};
        if (
$dd<10) {$dd="0$dd";};
        
$ss="$hh:$min ($dd.$mm.$yy)";

print 
"Секунды года: $secy\\n";
print 
"Секунды месяца: $secm\\n";
print 
"Начало месяца: $first, Конец месяца: $second\\n";
print 
"Начало месяца: $fs, Конец месяца: $ss\\n";
Космическая игрушка

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
localtime и undefined value
« Ответ #1 : 02 Декабря 2005, 12:25:24 »
Error202

Видимо не находит модуль Time::tm...

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
localtime и undefined value
« Ответ #2 : 02 Декабря 2005, 12:29:25 »
Если вместо $first и $second указать time, то все работает...
Здесь какой-то другой косяк... :(
Космическая игрушка

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
localtime и undefined value
« Ответ #3 : 02 Декабря 2005, 12:51:15 »
Error202

Во-первых, time считается не с 1900 года а 1970 года;
Во-вторых, объясни что ты тут делаешь?

$secy=((($y-1900)*365)-int($y/4))*24*60*60;

Если "выкусываешь" високосные года, то по математике у тебя явно была двойка...
И потом, а не стоит ли вернуть в последствие високосные года...

Дальше особо и не смотрел... исправь хотя бы это...

Добавлено:
В третьих, зачем тебе первый (нулевой) элемент массива месяцев, что бы потом цикл с единицы начинать?

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
localtime и undefined value
« Ответ #4 : 02 Декабря 2005, 13:01:52 »
Ну да... Корявая формулка получилась... :)


$secy
=((($y-1970)*365)-int(($y-1970)/4))*24*60*60


Такая прокатит?

Только теперь в датах действительно разница 1 месяц, но не с 1-го по 30 (или 31), а с 15 по 15 :(
« Последнее редактирование: 02 Декабря 2005, 13:08:36 от Error202 »
Космическая игрушка

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
localtime и undefined value
« Ответ #5 : 02 Декабря 2005, 13:14:24 »
Всем спасибо... Я извращенец... В моем случае вообще этого гемороя можно избежать...
Космическая игрушка

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28