Adding days to a timestamp

后端 未结 7 1316
春和景丽
春和景丽 2021-02-05 07:59

Giving a starting date, I\'m adding four times seven days to get 5 different dates separated exactly a week each one.

//$date = \'28-10-2010\';
$timestamp = mkti         


        
相关标签:
7条回答
  • 2021-02-05 08:27

    I will never understand why people use this horrible mktime function.

    In case you are on PHP5.3 yet, you might want to consider using

    $period = new DatePeriod(
        new DateTime('28-10-2010'),
        DateInterval::createFromDateString('1 week'),
        4);
    
    foreach ( $period as $dt ) {
      echo $dt->format( "l Y-m-d H:i:s\n" );
    }
    

    Without PHP5.3 you can still use

    for($i=0; $i<=4; $i++) {
        echo date('Y-m-d', strtotime("+$i weeks 28-10-2010")), PHP_EOL;
    }
    

    DateTime questions are pretty common on SO, so you might find interesting cases when searching.

    0 讨论(0)
  • 2021-02-05 08:30

    It looks like you moved to daylight time savings or back from them.

    POSIX time (timestamp) is always UTC while local time is UTC+X were X may change from date to date according to time savings.

    0 讨论(0)
  • 2021-02-05 08:31

    It really seems to be time zone/DST related.

    Adding

    date_default_timezone_set('UTC');
    

    as the first line solves the issue (as you no longer use any DST settings).

    0 讨论(0)
  • 2021-02-05 08:32

    I have had a great deal of success with this methodology for adding days, though i have not tested with your format:

    $date = The value of the database from your query
    $daysahead = The number of days ahead you want to calculate
    $final_date = date(“m/d/Y”, strtotime($date) + (86400 * $daysahead));
    
    echo $final_date;
    
    0 讨论(0)
  • 2021-02-05 08:33

    Never use math like 60*60*24*7 to add/subtract days (because of daylight time saving), use strtotime or mktime instead:

    $timestamp = strtotime('+7 days', $timestamp);
    
    // Or something like this (it's OK to have day parameter <= 0 or > 31)
    $timestamp = mktime(0, 0, 0, $month, $day + 7, $year);
    

    Your example will be more obvious if you'll output time as well:

    $timestamp = mktime(0, 0, 0, 10, 28, 2010);
    echo date('Y-m-d H:i:s', $timestamp) . "\n";
    
    $timestamp += 60*60*24*7;
    echo date('Y-m-d H:i:s', $timestamp) . "\n";
    

    Output:

    2010-10-28 00:00:00
    2010-11-03 23:00:00
    

    Here you have 2010-11-03 23:00:00 instead of 2010-11-04 00:00:00 because one of the days (31 Oct) is 25 hours long instead of 24.

    0 讨论(0)
  • 2021-02-05 08:36

    In case someone needs this, just like me referencing the site: Today, current time, Y-m-d H:i:s, plus +7 Days. OR you could add +3 Months, etc.

    $timestamp=strtotime("+7 Days");
    $nowtime =  date('Y-m-d H:i:s', $timestamp);
    
    0 讨论(0)
提交回复
热议问题