How to display only date - php

$date_from1 = new DateTime('1-9-2016');
$thisdate=$date_from1->add(new DateInterval('P1D'));
when I print_r($thisdate);
I am getting the output
DateTime Object ( [date] => 2016-09-02 00:00:00 [timezone_type] => 3 [timezone] => Australia/Sydney )
Expected Output:-
2016-09-02

You need to mention the date format.
Refer to the manual: DateTime::format Example
echo $thisdate->format('Y-m-d H:i:s');

Based on date-time format manual:- http://php.net/manual/en/datetime.format.php
<?php
$date_from1 = new DateTime('1-9-2016');
$thisdate=$date_from1->add(new DateInterval('P1D'));
//echo "<pre/>";print_r($thisdate);
echo $thisdate->format('Y-m-d');
Output:-
https://eval.in/634751

check this
$date_from1 = date("d/m/Y", strtotime("1-9-2016"));

Related

Strange bug of date_modify function in DateTime class

I use the native PHP DateTime class for adding days to dates. But when dealing with negative dates, I encountered a strange bug. Depending on the millennium added or a day or two. Example:
$date_one = date_create("-1000-12-27");
date_modify($date_one, '+1 day');
//Return DateTime Object ( [date] => -1000-12-29 00:00:00 )
$date_two = date_create("-2000-12-27");
date_modify($date_two, '+1 day');
//Return DateTime Object ( [date] => -2000-12-28 00:00:00 )
$date_three = date_create("-3000-12-27");
date_modify($date_three, '+1 day');
//Return DateTime Object ( [date] => -3000-12-29 00:00:00 )
That is, depending on the parity of the millennium issue, or December 28 or December 29. Why is this happening? What is the problem?

Repeat event on assigned day every week until specific date

When creating event I need to set event start and event end in datetime format (0000-00-00 00:00:00)
Then I have option to set weekly repeating of that event until specific date (0000-00-00)
But I can't insert repeating events properly in database. Here is what I have:
$startDateTime = '2015-04-30 10:30:00';
$endDateTime = '2015-04-30 11:30:00';
$repeatEndDate = '2015-06-01';
$timestamp = strtotime($startDateTime);
$day_of_week = date('l', $timestamp);
$step = 1;
$unit = 'W';
$repeatStart = new DateTime($startDateTime);
$repeatEnd = new DateTime($repeatEndDate);
$repeatStart->modify($day_of_week);
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($repeatStart, $interval, $repeatEnd);
foreach ($period as $key => $date ) {
$repeatQuery = 'INSERT INTO event(start,end,status,repeats) VALUES ("'.$startDateTime.'","'.$endDateTime.'","'.$status.'","'.$repeatEndDate.'")';
$repeatResult = mysqli_query($db, $repeatQuery) or die (mysqli_error($db));
}
When I do print_r($date); it looks like this, no actual time just 00:00:00
DateTime Object
(
[date] => 2015-04-30 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
I know that I can't insert values like that but I don't know how to get correct values from objects.
So in this example I need to insert events that begin in 10:30:00 and end in 11:30:00(events always end same day) every Thursday starting at 2015-04-30 and ending at 2015-06-01. How can this be achieved?
Thank you
The problem is you're calling DateTime::modify with a day name (currently 'Thursday'). This value is calculated from the $startDateTime variable, and then used to modify that variable, so the only effect it has, is resetting the Time portion of that DateTime instance back to 0:00:00.
The following gives me the results I would expect:
(I've commented out the parts you need to remove from yours, to make it easier to see the difference)
date_default_timezone_set('Etc/UTC');
$startDateTime = '2015-04-30 10:30:00';
$endDateTime = '2015-04-30 11:30:00';
$repeatEndDate = '2015-06-01';
#$timestamp = strtotime($startDateTime);
#$day_of_week = date('l', $timestamp);
$step = 1;
$unit = 'W';
$repeatStart = new DateTime($startDateTime);
$repeatEnd = new DateTime($repeatEndDate);
#$repeatStart->modify($day_of_week);
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($repeatStart, $interval, $repeatEnd);
foreach ($period as $key => $date ) {
echo($date->format('Y-m-d H:i:s')) . PHP_EOL;
}
The result from running the above is:
2015-04-30 10:30:00
2015-05-07 10:30:00
2015-05-14 10:30:00
2015-05-21 10:30:00
2015-05-28 10:30:00
When you modify your $repeatStart using the modify() method you are using the l format character which, according to the docs, returns
A full textual representation of the day of the week
by changing the $day_of_week format string to
$day_of_week = date('Y-m-d H:i:s', $timestamp);
I get the following output
DateTime Object
(
[date] => 2015-04-30 10:30:00
[timezone_type] => 3
[timezone] => Europe/London
)
DateTime Object
(
[date] => 2015-05-07 10:30:00
[timezone_type] => 3
[timezone] => Europe/London
)
DateTime Object
(
[date] => 2015-05-14 10:30:00
[timezone_type] => 3
[timezone] => Europe/London
)
DateTime Object
(
[date] => 2015-05-21 10:30:00
[timezone_type] => 3
[timezone] => Europe/London
)
DateTime Object
(
[date] => 2015-05-28 10:30:00
[timezone_type] => 3
[timezone] => Europe/London
)
Although, the modification is not actually necessary and the following code should achieve what you are looking for.
<?php
$startDateTime = '2015-04-30 10:30:00';
$endDateTime = '2015-04-30 11:30:00';
$repeatEndDate = '2015-06-01';
$step = 1;
$unit = 'W';
$repeatStart = new DateTime($startDateTime);
$repeatEnd = new DateTime($repeatEndDate);
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($repeatStart, $interval, $repeatEnd);
foreach ($period as $key => $date ) {
$repeatQuery = 'INSERT INTO event(start,end,status,repeats) VALUES ("'.$startDateTime.'","'.$endDateTime.'","'.$status.'","'.$repeatEndDate.'")';
$repeatResult = mysqli_query($db, $repeatQuery) or die (mysqli_error($db));
print_r($date);
}

PHP timestring to DateTime don't give correct result

I have a timestring comming from an XML File
1408226400
Now i want to convert this string into an DateTime object, but i'm getting the wrong result.
//This is an example for this Question, but with the real datestring
//My real code looks like this: $dbTurn->setStartDate(new \DateTime("#".$turn['cruiseStartDateString']));
$test = date("d-m-Y H:i", 1408226400);
$dateTime = new DateTime($test);
print_r($dateTime);
# result is DateTime Object ( [date] => 2014-08-16 18:00:00 [timezone_type] => 3 [timezone] => America/New_York )
But that is not the date i expected, because the result i should because is this:
2014-08-17 10:04:00
Also, taken from the real code i mentioned in the comment within the code, this snippet:
$dbTurn->setStartDate(new \DateTime($turn['cruiseStartDateString']));
Throws this error if i don't suppress the error message:
message => (string) DateTime::__construct(): Failed to parse time string (1408226400) at position 7 (4): Unexpected character
Is something wrong with the datestring or am i doing something wrong?
You don't need to create a formatted datestring using date() before passing to a DateTime object constructor:
$timestamp = 1408226400;
$dateTime = new DateTime('#' . $timestamp);
print_r($dateTime);
though you may also need to pass a timezone to the DateTime constructor as well
you can try this
date_default_timezone_set('Europe/Berlin');
$test = date("Y-m-d h:i:s", 1408226400);
$dateTime = new DateTime($test);
print_r($dateTime);
OUTPUT :
DateTime Object
(
[date] => 2014-08-17 12:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)

Changing timezone of a retrieved date in php

I am retrieving a date in format of 2013-09-15 08:45:00 from the database, which is set in UTC and I need to change it to another dynamic timezone (based on user)
So far I've got
$datetime = $row->field_data_field_performance_times_field_performance_times_v;
$eventDate = DateTime::createFromFormat('Y-m-d H:i:s', $datetime, new DateTimeZone($user->timezone));
$performance_time = date_format($eventDate, 'l, j F, Y, H:i');
But it doesn't change the timezone. Any ideas what's wrong? It should be +2 hours in my case.
Your input datetime is in UTC, not user's timezone. So first you must create datetime object in UTC, and then set/change timezone to user's :
$dt = new DateTime('2013-09-15 08:45:00', new DateTimeZone('UTC'));
print_r($dt);
/*
DateTime Object
(
[date] => 2013-09-15 08:45:00
[timezone_type] => 3
[timezone] => UTC
)
*/
Now you have datetime in UTC timezone. If you wish to change timezone, just call ->setTimezone() on DateTime object :
$dt->setTimezone(new DateTimeZone('Europe/Berlin'));
print_r($dt);
/*
DateTime Object
(
[date] => 2013-09-15 10:45:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
*/
p.s. because input 2013-09-15 08:45:00 is in standard datetime format, you don't need to use DateTime::createFromFormat.

get date from DateTime Object

After more than an hour struggling and trying I'd like to ask it here.
Trying to make something with weeks etc. in php I got from you site this:
Get all Work Days in a Week for a given date
Nice and will work for me fine.
But ... I can't get, trying and trying, the data out of this part: [date] => 2013-08-12 00:00:00
Array
(
[0] => DateTime Object
(
[date] => 2013-08-12 00:00:00
[timezone_type] => 3
[timezone] => Europe/Amsterdam
)
How to get that date out of the array ?
Please help me out, thanks in advance for the help !
Use DateTime::format()
$dateTime = new DateTime('2013-08-12 00:00:00');
echo $datetime->format('Y-m-d'); // produces 2013-08-12
$firstMondayThisWeek= new DateTime('2013-08-12');
$firstMondayThisWeek->modify('tomorrow');
$firstMondayThisWeek->modify('last Monday');
$nextFiveWeekDays = new DatePeriod(
$firstMondayThisWeek,
DateInterval::createFromDateString('+1 weekdays'),
4
);
$dateTimes = iterator_to_array($nextFiveWeekDays);
foreach ($dateTimes as $dateTime) {
echo $dateTime->format('Y-m-d H:i:s');
}

Categories