Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';s日期函数:从周数转换回月数_Php_Datetime - Fatal编程技术网

PHP';s日期函数:从周数转换回月数

PHP';s日期函数:从周数转换回月数,php,datetime,Php,Datetime,鉴于以下信息: 年份:2012年 周数:4 日名:星期二 如何使用PHP的日期函数将其转换为有效日期,如2012-01-12(YYYY-MM-DD) ThanxDateTime类不能这样做,但函数可以 返回一个数组: array 'tm_sec' => int 0 'tm_min' => int 0 'tm_hour' => int 0 'tm_mday' => int 24 'tm_mon' => int 0 'tm_year' =&g

鉴于以下信息:

  • 年份:2012年
  • 周数:4
  • 日名:星期二
如何使用PHP的日期函数将其转换为有效日期,如2012-01-12(YYYY-MM-DD)


Thanx

DateTime类不能这样做,但函数可以

返回一个数组:

array
  'tm_sec' => int 0
  'tm_min' => int 0
  'tm_hour' => int 0
  'tm_mday' => int 24
  'tm_mon' => int 0
  'tm_year' => int 112
  'tm_wday' => int 2
  'tm_yday' => int 23
  'unparsed' => string '' (length=0)
请注意,
tm_year
包含自1900年以来的年数,
tm_month
以0为基础,而不是以1为基础。因此,这表示2012-01-24,这是正确的。

使用此函数:

function get_date($year,$week,$day,$start_sunday=false){
    $day_array = array('Mon'=>1,'Tue'=>2,'Wed'=>3,'Thu'=>4,'Fri'=>5,'Sat'=>6,'Sun'=>($start_sunday?0:7));
    $month_array = array(31,($year%4==0?29:28),31,30,31,30,31,31,30,31,30,31);
    $week *= 7;
    $month = 1;
    for($i=0;$i<count($month_array);$i++){
        if($week-$month_array[$i]<=0){
            break;
        }
        $week -= $month_array[$i];
        $month++;
    }
    $format = "$year $month $week";
    $date = date_create_from_format("Y m j",$format);
    $date_num = date_format($date,"D");
    $curr = $day_array[ucfirst(strtolower($day))]-$day_array[$date_num];
    $got_date = strtotime("$curr ".($curr==1||$curr==-1?"day":"days"),strtotime(date_format($date,"Y-m-j")));

    return $got_date;
}

看到了吗?如果你搜索一点PHP文档,你的键盘会打你一巴掌吗?周数是真的吗?对不起,巴德,但是没有对
DateTime::createFromFormat
@VIPINJAIN的
weaknumber
的支持。你把它乘以7?回答很好。。我不知道这个函数。所以我写了一个剧本:D看看…-1因为它让我的眼睛受伤。还有更多的规则来计算是否是闰年。我知道第100年还有更多的规则:P
function get_date($year,$week,$day,$start_sunday=false){
    $day_array = array('Mon'=>1,'Tue'=>2,'Wed'=>3,'Thu'=>4,'Fri'=>5,'Sat'=>6,'Sun'=>($start_sunday?0:7));
    $month_array = array(31,($year%4==0?29:28),31,30,31,30,31,31,30,31,30,31);
    $week *= 7;
    $month = 1;
    for($i=0;$i<count($month_array);$i++){
        if($week-$month_array[$i]<=0){
            break;
        }
        $week -= $month_array[$i];
        $month++;
    }
    $format = "$year $month $week";
    $date = date_create_from_format("Y m j",$format);
    $date_num = date_format($date,"D");
    $curr = $day_array[ucfirst(strtolower($day))]-$day_array[$date_num];
    $got_date = strtotime("$curr ".($curr==1||$curr==-1?"day":"days"),strtotime(date_format($date,"Y-m-j")));

    return $got_date;
}
Enjoy............