PHP: Merge two date objects into one - php

I've got two date objects sent from a date input and a time input.
I want to generate a DateTime object with the yyyy-mm-dd from the date input and hh-mm from the time input.
Data sent from date input
[search_from_date] => 2015-08-04T23:00:00.000Z
Data sent from time input
[search_from_time] => 1970-01-01T02:02:00.000Z
I need to merge these two dates into:
2015-08-04 02:02
I've been playing around with exploding the string, etc to no avail,
Any help would be appriciated
Cheers

You can create two DateTime objects from your strings, then use the second to set the time on the first.
$arr = ['search_from_date' => '2015-08-04T23:00:00.000Z', 'search_from_time' => '1970-01-01T02:02:00.000Z'];
$date = new DateTime($arr['search_from_date']);
$time = new DateTime($arr['search_from_time']);
$date->setTime($time->format('H'), $time->format('i'), $time->format('s'));
echo $date->format('r');
Here's an eval.in with an example - https://eval.in/424209

you can split on "T" like that :
$search_from_date = "2015-08-04T23:00:00.000Z";
$search_from_time = "1970-01-01T02:02:00.000Z";
$tab_date = explode("T", $search_from_date);
$tab_time = explode("T", $search_from_time);
$date_time = new DateTime("$tab_date[0]T$tab_time[1]");
var_dump($date_time);

Try this,
$search_from_date = '2015-08-04T23:00:00.000Z';
$search_from_time = '1970-01-01T02:02:00.000Z';
$data = explode('T',$search_from_date);
$data1 = explode('T',$search_from_time);
$data1 = explode('.',$data1[1]);
echo $data[0].' '.$data1[0];

$time=new DateTime('1970-01-01T02:02:00.000Z');
$date=new DateTime('2015-08-04T23:00:00.000Z');
$newDateTime= new DateTime();
$newDateTime->setTime($time->format('H'),$time->format('i'),$time->format('s'));
$newDateTime->setDate($date->format('Y'),$date->format('m'),$date->format('d'));
echo $newDateTime->format('Y/m/d H:i'));
exit;

Something like this should work.
$finalDateD creates a date string for just the Year, month and day
and
$finalDateT creates a date string for just the Hours, minutes
This is then concatenated into the variable $finalDate;
$finalDateD = date('Y-m-d', strtotime($search_from_date));
$finalDateT = date('H:i', strtotime($search_from_time));
$finalDate = $finalDateD.' '.$finalDateT;

Related

get date from dateTime in PHP

I want to extract date without time from a single value from array result thaht I got.
I tried using array_slice but it didn't work.
My code..
$dateRows = $this->get('app')->getDates();
$dateRow = json_decode(json_encode($dateRows[0], true));
dump($dateRow[0]);die;
And I got result..
"2014-01-01 00:00:00"
And I want it to return just
"2014-01-01"
Very Simple, just use date_create() on your date & then format it using date_format() as follows -
$date = date_create("2014-01-01 00:00:00");
echo date_format($date,"Y-m-d");
So, in your case, it would be something like -
$date1 = date_create($dateRows[0]);
echo date_format($date1,"Y-m-d");
you can use strtotime function as well for getting formatted data
$a = "2014-01-01 00:00:00";
echo date('Y-m-d', strtotime($a));

Date formation in viewmanager php

i'm very new to this Forum. I'm working on my own website and got a problem.
Because i'm very new to coding and not very skilled with php i can't find a solution for this little problem.
I would like to formate my date from the Database to a "friendlydate"
e.g. Date from Database: 2016-06-08 00:00:00
my wish-date: 08.06.2016
Here is my Code from the viewmanager, where i want do define the
"friendlydate"
// assign values to view object
$viewBlog->id = $value->id;
$viewBlog->bild = $value->bild;
$viewBlog->date = $value->date;
$viewBlog->author = $value->author;
$viewBlog->title = $value->title;
$viewBlog->text = $value->text;
$viewBlog->category_id = $value->category_id;
if (strlen($value->text) > 280) {$viewBlog->shorttext = substr($value->text,0,280)."...";} else {$viewBlog->shorttext = $value->text;}
***$viewBlog->friendlydate = here is my problem;***
$viewBlog->objCategory = $this->getViewCategory($value->category_id);
You can parse your original date in to a DateTime object which will then allow you to format the date however you like. For instance:
$date = new DateTime($value->wish-date);
$viewBlog->friendlydate = $date->format('Y-m-d H:i:s');
In this case, friendlydate would be 2016-06-08 00:00:00. To see how to specify what format you like see the documentation.
Assuming $viewBlog->friendlydate is your date variable,
$viewBlog->friendlydate = date("m.d.Y");
where m is numeric representation of a month, with leading zeros, n is numeric representation of a month without leading zeros and Y is a full numeric representation of a year output as 4 digits.
Using string functions:
$parts = explode('-', substr('2016-06-08 00:00:00', 0, 10));
$date = $parts[2].'.'.$parts[1].'.'.$parts[0];
This will convert the string as you have described. You may also want to look into PHP date functions.
You will just need to reformat your date. I am really fond of the DateTime method in php.
// Get the current date with its format
$date = DateTime::createFromFormat('Y-m-d H:i:s', $value->date);
// Convert it to a new format
$viewBlog->date = $date->format('d.m.Y');
In the resource below you can find information about different formats in which you can output your date.
Resources
DateTime - Manual

i want to get only date from datetime variable in php

I need to get only date from datetime variable. I was using this code. It was working fine but now I am facing problem when I'm trying to store only date in mysql please. Take a look at the code below and please tell me what I'm missing,
$date_time = "11-Dec-13 8:05:44 AM"
From the date I got from user input, I need to save only date in att_date variable.
$arr = explode("/", $date_time);
$arr2 = explode(" ", $arr[2]);
$att_date = $arr2[0].'-'.$arr[0].'-'.$arr[1];
Here is the solution:
$date_time = "11-Dec-13 8:05:44 AM";
$new_date = date("Y-m-d H:i:s",strtotime($date_time));
Even if you just use "Y-m-d" it will work instead of using "Y-m-d H:i:s",please practice below example:
$datetime = '2022-10-11 06:38:02';
$getOnlyDate = date('Y-m-d',strtotime($datetime));
echo $getOnlyDate; // output: 2022-10-11
You can get the date from the datetime variable using the
Date();
function from mysql using php query, it automatically extracts the date from it. You can learn it here.

convert string into date

Hi I know this question is a bit trivial. I googled it but could not find the exact problem anywhere.
I have a string which contains a application filling date how can I convert this string into date
$appln_filling_date = '20020315';
The type of appln_filling_date is string I want to convert its type to date and want the data remain the same. The field in the database has a type date.
EDIT
This is what I am trying to do
$appln_filling_date = strtotime($appln_data['bibliographic-data']['application-reference']['document-id']['1']['date']['$']);
$appln_filling_date = date('Y-m-d', $appln_filling_date);
If your date is in some standard date format use this example:
$d = new DateTime('20020315');
echo $d->format('Y-m-d');
# or [if you do not have DateTime, which is in php >= 5.2.0]
$t = strtotime('20020315');
echo date('Y-m-d', $t);
If your date is not in some standard format use this example:
$d = DateTime::createFromFormat('d . Y - m', '15 . 2002 - 03');
echo $d->format('Y-m-d');
$date = DateTime::createFromFormat('Ymd', $appln_filling_date);
This worked for me like a charm
$appln_filling_date = $appln_data['bibliographic-data']['application-reference']['document-id']['1']['date']['$'];
$appln_filling_date = date_create(date('Y-m-d', $appln_filling_date));
Thanks for the down voting

change dd/mm/yy date format to yy/mm/dd using php

I'm having date 20/12/2001 in this formate . i need to convert in following format 2001/12/20 using php .
$var = explode('/',$date);
$var = array_reverse($var);
$final = implode('/',$var);
Your safest bet
<?php
$input = '20/12/2001';
list($day, $month, $year) = explode('/',$input);
$output= "$year/$month/$day";
echo $output."\n";
Add validation as needed/desired. You input date isn't a known valid date format, so strToTime won't work.
Alternately, you could use mktime to create a date once you had the day, month, and year, and then use date to format it.
If you're getting the date string from somewhere else (as opposed to generating it yourself) and need to reformat it:
$date = '20/12/2001';
preg_replace('!(\d+)/(\d+)/(\d+)!', '$3/$2/$1', $date);
If you need the date for other purposes and are running PHP >= 5.3.0:
$when = DateTime::createFromFormat('d/m/Y', $date);
$when->format('Y/m/d');
// $when can be used for all sorts of things
You will need to manually parse it.
Split/explode text on "/".
Check you have three elements.
Do other basic checks that you have day in [0], month in [1] and year in [2] (that mostly means checking they're numbers and int he correct range)
Put them together again.
$today = date("Y/m/d");
I believe that should work... Someone correct me if I am wrong.
You can use sscanf in order to parse and reorder the parts of the date:
$theDate = '20/12/2001';
$newDate = join(sscanf($theDate, '%3$2s/%2$2s/%1$4s'), '/');
assert($newDate == '2001/12/20');
Or, if you are using PHP 5.3, you can use the DateTime object to do the converting:
$theDate = '20/12/2001';
$date = DateTime::createFromFormat('d/m/Y', $theDate);
$newDate = $date->format('Y/m/d');
assert($newDate == '2001/12/20');
$date = Date::CreateFromFormat('20/12/2001', 'd/m/Y');
$newdate = $date->format('Y/m/d');

Categories