⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datetime.pm

📁 1. 记录每个帖子的访问人情况
💻 PM
字号:
# Copyright 2001-2005 Six Apart.# SCRiPTMAFiA 2005 - THE DiRTY HANDS ON YOUR SCRiPTS## $Id: DateTime.pm 10197 2005-03-09 00:27:57Z ezra $# Adapted from DateTime package to avoid requirement of DateTime package.package MT::DateTime;use Exporter;@MT::DateTime::ISA = qw( Exporter );use vars qw( @EXPORT_OK );@EXPORT_OK = qw( ymd2rd tz_offset_as_seconds );sub new {    my $class = shift;    my (%param) = @_;    my $self = \%param;    bless $self, $class || __PACKAGE__;}sub week_year { (shift->week)[0] }sub week_number { (shift->week)[1] }sub year { shift->{year} }sub month { shift->{month} }sub day { shift->{day} }sub hour { shift->{hour} }sub minute { shift->{minute} }sub second { shift->{second} }sub time_zone { shift->{time_zone} }sub day_of_year {    my $self = shift;    return $self->{local_c}{day_of_year} if $self->{local_c}{day_of_year};    my $year = $self->year;    my $days = 0;    require MT::Util;    for (my $i = 1; $i < $self->month; $i++) {        $days += MT::Util::days_in($i, $year);    }    $days += $self->day;    $self->{local_c}{day_of_year} = $days;}sub week {    my $self = shift;    unless ( defined $self->{local_c}{week_year} ) {        my $jan_one_dow_m1 =            ( ( $self->ymd2rd( $self->year, 1, 1 ) + 6 ) % 7 );        $self->{local_c}{week_number} =            int( ( ( $self->day_of_year - 1 ) + $jan_one_dow_m1 ) / 7 );        $self->{local_c}{week_number}++ if $jan_one_dow_m1 < 4;        if ( $self->{local_c}{week_number} == 0 ) {            $self->{local_c}{week_year} = $self->year - 1;            $self->{local_c}{week_number} =                $self->weeks_in_year( $self->{local_c}{week_year} );        }        elsif ( $self->{local_c}{week_number} == 53 &&                $self->weeks_in_year( $self->year ) == 52 )        {            $self->{local_c}{week_number} = 1;            $self->{local_c}{week_year} = $self->year + 1;        }        else        {            $self->{local_c}{week_year} = $self->year;        }    }    return @{ $self->{local_c} }{ 'week_year', 'week_number' }}sub weeks_in_year {    my $self = shift;    my $year = shift;        my $jan_one_dow =        ( ( $self->ymd2rd( $year, 1, 1 ) + 6 ) % 7 ) + 1;    my $dec_31_dow =        ( ( $self->ymd2rd( $year, 12, 31 ) + 6 ) % 7 ) + 1;    return $jan_one_dow == 4 || $dec_31_dow == 4 ? 53 : 52;}sub ymd2rd {    my $self = shift;    use integer;    my ( $y, $m, $d );    if (@_) {        ( $y, $m, $d ) = @_;    } elsif (ref $self) {        ( $y, $m, $d ) = ( $self->{year}, $self->{month}, $self->{day} );    }    my $adj;    # make month in range 3..14 (treat Jan & Feb as months 13..14 of    # prev year)    if ( $m <= 2 )    {        $y -= ( $adj = ( 14 - $m ) / 12 );        $m += 12 * $adj;    }    elsif ( $m > 14 )    {        $y += ( $adj = ( $m - 3 ) / 12 );        $m -= 12 * $adj;    }    # make year positive (oh, for a use integer 'sane_div'!)    if ( $y < 0 )    {        $d -= 146097 * ( $adj = ( 399 - $y ) / 400 );        $y += 400 * $adj;    }    # add: day of month, days of previous 0-11 month period that began    # w/March, days of previous 0-399 year period that began w/March    # of a 400-multiple year), days of any 400-year periods before    # that, and 306 days to adjust from Mar 1, year 0-relative to Jan    # 1, year 1-relative (whew)    $d += ( $m * 367 - 1094 ) / 12 + $y % 100 * 1461 / 4 +          ( $y / 100 * 36524 + $y / 400 ) - 306;}sub tz_offset_as_seconds {       my $self = shift;    my $offset = shift;     if (ref $self) {        $offset = $self->{time_zone};    }    return undef unless defined $offset;    return 0 if $offset eq '0';            my ( $sign, $hours, $minutes, $seconds );    if ( $offset =~ /^([\+\-])?(\d\d?):(\d\d)(?::(\d\d))?$/ )    {        ( $sign, $hours, $minutes, $seconds ) = ( $1, $2, $3, $4 );    }    elsif ( $offset =~ /^([\+\-])?(\d\d)(\d\d)(\d\d)?$/ )    {        ( $sign, $hours, $minutes, $seconds ) = ( $1, $2, $3, $4 );    }       else    {               return undef;    }            $sign = '+' unless defined $sign;    return undef unless $hours >= 0 && $hours <= 99;    return undef unless $minutes >= 0 && $minutes <= 59;    return undef unless ! defined( $seconds ) || ( $seconds >= 0 && $seconds <= 59 );                my $total =  $hours * 3600 + $minutes * 60;    $total += $seconds if $seconds;    $total *= -1 if $sign eq '-';    return $total;}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -