I have a date in this format:
24-12-2010 // DAY - MONTH - YEAR
I need to get it in this format:
1995-12-31T23:59:59.999Z // The Z is for the TimeZone I think.
Check this link out:
http://lucene.apache.org/solr/api/org/apache/solr/schema/DateField.html
The above link is the way I need the date.
I am using PHP now, so this needs to be with PHP.
How can I convert these dates the easiest way?
Thanks
That is an ISO8601 format date; the following is what you want.
gmdate('Y-m-d\TH:i:s\Z', strtotime($date_value));
You can do something like that:
$dateTime = new DateTime($myDate);
$formatted = $dateTime->format("Y-m-d\TH:i:s.z\Z");
The mentioned solution with:
$dateTime->format(DateTime::W3C);
$dateTime->format(DateTime::ISO8601);
does return strings like:
2012-11-28T17:21:11+0100
which cannot be parsed, at least with newer Solr versions.
I wouldn't use gmdate if you need to support timezones. The DateTime implementation is well done, and is also available for functional programming.
http://php.net/manual/en/class.datetime.php
http://php.net/manual/en/ref.datetime.php
You can use the DateTime class
$dateTime = new DateTime();
$dateTime.setDate(24, 12, 2010);
$output = $dateTime.format(DateTime::W3C);
// Output now is your date in W3C format.
use the date ( string $format [, int $timestamp ] ) function of php!
In second paramter use http://php.net/manual/en/function.strtotime.php to get the timestamp from strings
$date = strtotime('24-12-2010');
$new_date = gmDate("Y-m-d\TH:i:s.z\Z",$date);
Related
I'm programming a site about genealogy, I used the date input to acquire dates, and
$datamm= strftime('%Y-%m-%d', strtotime($_POST['datamm']));
to convert the dates for the database, but the minimum value that I can get is 1970-01-01. I need to acquire dates between 1500 and current day.
What can I do to solve the problem?? I prefer procedural solution if it is possible.
Here is an example,
<?php
$date = new DateTime( '01-01-1950' );
echo $date->format( 'Y-m-d' );
?>
DateTime is great, you can do all sorts once you understand it.
For instance, this will add a year and echo the start and end dates,
<?php
$date = new DateTime( '01-01-1950' );
echo $date->format( 'Y-m-d' )."\n";
$date->modify( '+1 years' );
echo $date->format( 'Y-m-d' );
?>
If you know that in which format your date is coming from input then you can try:
$datamm = DateTime::createFromFormat('j-M-Y', $_POST['datamm']);//You know that date is coming in j-M-Y format
echo $date->format('Y-m-d'); // You can save in Y-m-d format in database
if you are taking timestamp as input then :
$date = date('Y-m-d',$_POST['datamm']);//you are taking timestamp like : 30000000000 as an input
echo $date;//make in database in Y-m-d format
I hope it helps
Try this, use createFromFormat
// pass your date format
$date = DateTime::createFromFormat('d M Y','17 Jan 1500');
echo $date->format('Y-m-d');
DEMO
You should probably focus on using some 3rd party library instead of official PHP's datetime functions.
For example, for your advanced date-time manipulating requirements, a good alternative for PHP's standard datetime would be moment.php
It's inspired by moment.js library whose goal is to fix common date-time programming issues, and bring standardization to higher level.
You can obtain it via composer like:
{
"require": {
"fightbulc/moment": "*"
}
}
Or via github for manual installation.
To parse various input date consult a manual, below is example:
$m = new \Moment\Moment('1503-04-25T03:00:00', 'CET');
There is also other alternatives to explore, for example:
https://github.com/swt83/php-date
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 am using Datetime class on PHP.
you can change datetimeclass to string like this.
$date->format('Y-m-d H:i:s')
// it shows 2013-08-05 10:00:00
but somehow ,Google API requires format like this .
2013-08-05T10:00:00
What this T means ?
and How can I make this style string from DateTime class neatly?
The time is in ISO 8601 format. To print it out, you can use 'c' format character:
$date->format('c')
You could use jh314's solution above, and it will give you the time in following format:
2013-08-08T10:18:15+05:30
However, to format it exactly like you want, you could use the following:
$part1 = $date->format('Y-m-d'); // 2013-08-08
$part2 = $date->format('H:i:s'); // 10:19:37
$newdate = "{$part1}T{$part2}"; // 2013-08-08T10:19:37
Or better yet:
$date = $date->format('Y-m-d\TH:i:s'); // 2013-08-08T10:19:37
Ta-dah!
This is ISO 8601 datetime format check this
$date->format('c') //Output 2004-02-12T15:19:21+00:00
This is almost, but not quite ISO8601 format, so you need to format the output like this:-
$date = new \DateTime();
echo $date->format('Y-m-d\TH:i:s');
The \ escapes the 'T'. See the manual about formatting dates.
See it working
I am using this, but it's not working for date 2012,02,26:
$theDate = "2012,02,26";
$timeStamp = StrToTime($theDate);
$in6days = StrToTime('+6 days', $timeStamp);
$newdate = date("{$theDate}", strtotime('+1 day', strtotime($in6days)));
echo "$newdate";
showing 2012,02,32
I don't think that 2012,02,26 is a valid format that strtotime() will accept. Valid date formats are listed here: PHP: Date Formats
In order to check if the strToTime function works or not , try:
echo $timeStamp;
If you get false then you should use another data format as christophmccann recommended,
for instance:
$theData = "02/16/2012"; //or the next one
$theData = "30-6-2008";
You should be working internally with widely used date formats - either unix timestamp or RFC 2822 if you have good reason to. Use date() to reformat your date according to your own display requirements if you wish (see php.net/date).
So, you can show today in your preferred date format using echo date('Y,m,d');
I need to construct a DateTime from an integer Unix timestamp 1329272833. The documentation says the constructor needs a "date/time" string like 2006-04-12T12:30:00. I manually did my own conversion:
$dateTimeEnd = new DateTime(
date('Y-m-d\TH-i-s', 1329272833)
);
Does PHP have a built in function to do this conversion?
You can use a timestamp as parameter if you add the #-sign at the front:
$dateTimeEnd = new DateTime('#1329272833'); # 2012-02-15 02:27:13+00:00
Demo. You find it documented on the manual page, see the examples.
$dateTimeEnd = DateTime::createFromFormat('U', 1329272833);
See DateTime::createFromFormat()
$date = new DateTime();
$date->setTimestamp(1171502725);
Datetime::setTimestamp()
All the comments above don't answer the question "how to convert timestamp to datetime STRING", they answer the question "how to convert timestamp to datetime OBJECT"
Given that $dateTime->date doesn't work, it seems to me the answer is not so obvious.
Probably
$date = new DateTime();
$date->setTimestamp(1171502725);
$date_string = date_format($date, 'U = Y-m-d H:i:s')
would be an answer.
Not sure it's optimal though. And looks ugly.