I am writing below code to convert the data to Date.
$date = strtotime($request->input('DueDate'));
$Job->DueDate = date('Y-m-d', $date);
$Job->save();
But this saves the data as 0000-00-00
Try this maybe: (createFromFormat's first argument should be the format which is being received by the user)
$dt = \DateTime::createFromFormat('m/d/Y', strtotime($request->input('DueDate')));
$Job->DueDate = $dt->format('Y-m-d');
$Job->save();
Cheers,,
Let say your DueDate is correctly return the data. Try this:
$date = Carbon::parse($request->input('DueDate'))->format('Y-m-d');
$Job->DueDate = $date;
$Job->save();
Use carbon instance. For more docs Carbon
From the PHP manual for strtotime()
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.
So the simplest mod for your situation would be to just convert the slashes to hyphens like this
$fixDate = str_replace('/', '-', $request->input('DueDate'));
$date = strtotime($fixDate);
$Job->DueDate = date('Y-m-d', $date);
$Job->save();
Related
I m trying to add 28 days to the given date and echo, however it is taking the given date and considering it as month and adding the days given
Help me fix the format.
my code goes as:
$start = "04/03/2019";
$nextpay1 = date('d/m/Y',strtotime($start . "+28 days"));
echo $nextpay1;
as result it is echoing "01/05/2019", which is not right..
I'll start my answer by quoting the strtotime docs:
Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at
the separator between the various components: if the separator is a
slash (/), then the American m/d/y is assumed; whereas if the
separator is a dash (-) or a dot (.), then the European d-m-y format
is assumed. If, however, the year is given in a two digit format and
the separator is a dash (-), the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD)
dates or DateTime::createFromFormat() when possible.
So, in your case:
$date = DateTime::createFromFormat('d/m/Y', '04/03/2019');
$date->modify('+28 days');
echo $date->format('d/m/Y');
The problem is that $start is being parsed in the default mm/dd/yyyy format. You should use a function to parse it as the format you intend, and then add to that.
$parsed = date_parse_from_format('d/m/Y', $start);
$startdate = mktime(
$parsed['hour'],
$parsed['minute'],
$parsed['second'],
$parsed['month'],
$parsed['day'],
$parsed['year']
);
$nextpay1 = date('d/m/Y', strtotime('+28 days', $startdate));
$date=Date('y:m:d', strtotime("+3 days"));
This will save the date after 3 days
I find a problem related to the date function in php
i want to convert a date '04-08-2016'(mm-dd-yyyy) into a different format '2016-04-08'(yyyy-mm-dd). But it produces the result as '2016-08-04'(yyyy-dd-mm) instead of '2016-04-08'(yyyy-mm-dd).
my code is
$date = '04-08-2016';
echo date('Y-m-d',strtotime($date));
If i place '/' in place of '-' then it is working fine.
Can anyone tell me why this is happening?
You can use the DateTime object:
$date = '04-08-2016';
$d = DateTime::createFromFormat("m-d-Y", $date);
echo $d->format("Y-m-d");
The reason you need to do this is date conventions.
As specified in http://php.net/manual/en/function.strtotime.php
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.
Try this:
$date = '04-08-2016';
$timeArray = strptime($date, '%m-%d-%Y');
$timestamp = mktime(0, 0, 0, $timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900);
echo date('Y-m-d', $timestamp);
This allows you to specify the format yourself.
I'm trying to insert a date value in a MySQL table like this (using Laravel 5.1):
public function update(Request $request, $id)
{
$user = User::findOrFail($id);
$data = $request->all();
$data['birthdate'] = date("Y-d-m", strtotime($data['birthdate']));
...
$user->fill($data)->save();
It works fine if I insert a date which the day < 12, while it'll be inserted 1970-01-01 if day > 12 !
I've used Eloquent mutators in User model like this :
public function getBirthdateAttribute() {
return date('d/m/Y', strtotime($this->attributes['birthdate']));
}
public function setBirthdateAttribute($value) {
$this->attributes['birthdate'] = Carbon::createFromFormat('Y-m-d', $value);
}
Please what's the matter with my code !?
change this:
date("Y-d-m", strtotime($data['birthdate']));
to:
date("Y-m-d", strtotime($data['birthdate']));
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html
where your should be like this format dd-mm-yyyy, and if it like this dd/mm/yyyy
$date = '22/05/2012';
$date = str_replace('/', '-', $date);
$date = date('Y-m-d', strtotime($date));
This is the piece of the strtotime() manual you need to read and understand
Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.
So because you are using the / as a seperator strtotime() is assuming the American date format and getting the day and month parts confused
I have a biometric device which gives date format in d/m/Y h:i:s but I want to convert the same information to Y-m-d.
$var = d/m/Y h:i:s ;
echo convert($var); // Output want: Y-m-d
But if date is 10-11-2015 then how php will know that the format is d-m-y or m-d-y ?
I know how to convert yyyy-mm-dd to dd-mm-yyyy, but want dd-mm-yyyy to yyyy-mm-dd
How Can I do that ?
use the DateTime class
$date = DateTime::createFromFormat('d/m/y', '28/11/15');
echo $date->format('Y-m-d');
outputs
2015-11-28
Or you could do it on one line if you like that sort of thing:
echo \DateTime::createFromFormat('d/m/y', '28/11/15')->format('Y-m-d');
also read the note from here manual
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.
Try this:
$var = date('d/m/Y h:i:s');
$datetime = explode(' ', $var);
$date_string = implode('-', array_reverse(explode('/', $datetime[0])));
$time_string = $datetime[1];
$formated = date('Y-m-d', strtotime("{$date_string} {$time_string}"));
echo "<pre>";
print_r($formated); // test output
echo "</pre>";
I have a problem with strtotime function in php, i'm trying to convert mm-dd-yyyy to yyyy-mm-dd. The date is entered on the text box and on submit it should save the date to the database. the problem is it returns a wrong date(1970-01-01) each time,which means my code isn't taking the variable i use to store the date, My code is:
//dateconvert
$submitdate = date($_POST['date']);
$date = date("Y-m-d", strtotime($submitdate));
//storeindb
$query ="INSERT INTO ticket SET date = '$date'";
$result = mysql_query($query);
I'm a newbie,please help.
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
http://php.net/manual/en/function.strtotime.php
You need to use the forward slash separator for mm/dd/yyyy formats.
Use the code as:
$submitdate = $_POST['date'];
$date = date("Y-m-d", strtotime($submitdate));
Hope this hepls.
date format in $submitdate is incorrect Because the format yyyy/mm/dd should be yyyy-mm-dd so you will need to replace your / characters.
Try this:
$submitdate = str_replace("/","-",$_POST['date']);
echo date('Y-m-d', strtotime($submitdate));