PHP add colons to a string - php

Hello I have this string that will generate the time that I then insert in the db
$time=mktime(date('G'),date('i'),date('s'));
$NowisTime=date('Gis',$time);
Now I need to readd colons to this string: :
I need it to be generated and inserted without colons, but shown in another place with colons reinserted, so that it will look like this:
13:24:09
Instead of:
132409
The same is for $todaydate = date('Ymd');
That should become then 2011-06-16
How can I do that?
Counting the words is not good, since we can have more or less types depending by the actual time and date.
Please advise
Thank you!
FOR WHO DOES NOT UNDERSTAND: this values are taken from the DB so I cannot use : date('Y-m-d'); in a values taken from the db........

The same is for $todaydate =
date('Ymd');
That should become then 2011-06-16
For this one, try :
date('Y-m-d');
Similar for your Other part.
Edit ::
For Date :
$time = "time from database";
$unixtimestamp = strtotime ( $time) ;
$date = date('Y-m-d', $unixtimestamp);
For time :
$time = strtotime("time from database");
$yourtime = date("H:i:s", $time);

The strings you supply for formatting can contain anything you'd like, so putting the dashes or semicolons there is no problem. You can even include other text, as long as any letters used in the date code are escaped with a backslash.
The entire
$time=mktime(date('G'),date('i'),date('s'));
$NowisTime=date('Gis',$time);
could be rewritten, too. You're maing a timestamp from the current time, then giving it to date(). date uses the current time by default, so there's no need to do that to show the current time.
Here's one way:
$NowisTime=date('G:i:s');

If you are doing exactly what you say you are doing, you can count the characters starting at the end and add the characters (: and -) at the right place:
Both date('is') and date('Ymd') produce a fixed format using leading zeros so the length is always the same. You only have to compensate for the date('G') part.
So really all you have to do is chop off 2 characters from the end of the string twice and what remains is the year or the hour.

Well if you use date('his') instead and cast it as a string (so PHP doesn't interpret it as an integer and remove the possible leading zero), you can add colons by splitting the string every two numbers and then imploding it with colons.
$d = (string)date( 'his' );
echo (int)$d; //Format without colons
echo implode( ':', array_map('intval', str_split( $d, 2 ) ) );
For the second part, do the same except split the string by 4 characters and then split the second split by 2.
$d = date('Ymd');
echo $d; //Format without dashes
list($year, $second) = str_split( $d, 4 );
$parts = str_split( $second );
array_unshift( $parts, $year );
echo implode( '-', $parts );
In both situations however it would just be easier to start out with the formatted strings (with the colons and dashes) and remove them for the db.
$d = date('G:i:s');
echo $d; //With colons
echo str_replace( ':', '', $d );
$d = date('Y-m-d');
echo $d; //With dashes
echo str_replace( '-', '', $d );

When you are generating the value to store in your database, use a Unix timestamp:
$timestamp = time();
// store $timestamp in your database
That way you don't have to worry about how it looks or parsing it at all. Then, when you're ready to display it to your user, you can use:
$formattedTime = date('G:i:s', $timestamp);
which will display it in the colonated (is that even a word?) format for your users.

Couldn't you do something like :
$new = "";
for ($i = 2; $i <= strlen($NowisTime); $i+2) {
$new .= $NowisTime[$i-2] . $NowisTime[$i-1] . ":";
}

$NowisTime=date('G:i:s',$time);
$todaydate = date('Y-m-d');

Related

Laravel - How Convert Thousand Comma to Decimal Number

i have input form currency with format like this 1,000.00
and i want to save in database in decimal format like 1000.00
how to change it in controller, when save it it will automatically change to decimal format?
$num = '3,500.20';
$formattedNum = number_format($num, 3, '', '');
echo $formattedNum;
the code above convert to 3000 not 3500.20
you can use str_replace of php to get you result:
<?php
$num = '3,500.20';
$formattedNum = str_replace(',', '', $num);
echo $formattedNum;
?>
str_replace funcation replace your ',' with '' a blank value,
To read more about str_replace you can read here
You can just remove comma with str_replace(',', '', $num) for example.
But better to get correct value right from your input.
Input format shouldn't affect actual input value which is 3500.20, that doesn't look as good practice.
Also number_format is not for converting string to numbers, on the contrary it makes pretty string from number(integer/float).
You can try str_replace for the desired result:-
$number = '3,500.20';
$number = str_replace(',', '', $number);
echo $number;
Output
3500.20

How to pull the non delimited date and time out of a string

I need to pull the date and time out of this string: some_report_20161005_1530.xml so I can reformat it to something more work-with-able. The date and time will change from file to file, but will always stay in this format: some_report_{year}{month}{day}_{24hr time}.xml
$test = 'some_report_20161005_1530.xml';
preg_match('(\d{4})(\d{2})(\d{2})_(\d{4})', $test, $test_matches);
print_r( $test_matches );
What would be the best way to accomplish this?
(Forgive my ignorance or misuse of these functions. I am by no means an expert)
If the some_report doesn't contain digits, the date and time parts are already in a good order to work in the DateTime constructor, so you can extract them with a simpler regex.
$date_time = new DateTime(preg_replace("/[^0-9]/", "", $your_string));
One simple regex approach would be to pull out the 8 and 4 digit numbers:
preg_match("/(\d{8})_(\d{4})/", $filename, $matches);
array_shift($matches);
list($date, $time) = $matches;
Working example: https://3v4l.org/npGC8
Or you could just use explode and skip the regex:
list($name1, $name2, $date, $time) = explode("_", str_replace(".","_", $filename));
Working example: https://3v4l.org/lAvTN
Then it's as simple as handing it to DateTime, such that you can manipulate or format however you want.
$dt = new DateTime($date . $time);
echo $dt->format('n/j/y h:ia'); // 10/5/16 03:30pm
$test = 'some_report_20161005_1530.xml';
echo preg_replace('#(\d{4})(\d{2})(\d{2})(_)(\d{2})(\d{2})#',
'${1}-${2}-${3}_${5}:${6}', $test) , '<br/>';
preg_match(
'#(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})(_)(?<hour>\d{2})(?<minute>\d{2})#',
$test,$test_matches);
print_r( $test_matches );
Just examples...

How can I take off a letter from a string in PHP?

I would like to know how can I take a character out of a string?
I have a date:
$date = "04.08.2013";
I would like to take just the first 2 zeros off. Like that:
$date = "4.8.2013"
How can I do it?
A simplish (read: hacky) solution would be:
$date = implode('.', array_map(function($x) { return (int)$x; }, explode('.', $date)));
You can may also get it done quickly using a regex:
$new_date = preg_replace('/(?<=^|\.)0/', '', $date);
Or more simply without the lookbehind (thanks #IlmariKaronen):
$new_date = preg_replace('/\b0/', '', $date);
Demo
use explode() to separate the string into an array then use ltrim to delete "0"
i.e.
$date = explode(".", "04.08.2013");
$new_date = implode(".", array(ltrim($date[0],"0"), ltrim($date[1],"0"), $date[2]));
or something like that

PHP count, add colons every 2 characters

I have this string
1010081-COP-8-27-20110616214459
I need to count the last 6 characters starting from the end of this string (because it could may be long starting from the begin)
Then I need to add colons after every 2 characters.
So after counting 6 characters from the end it will be
214459
After having added the colons it will look like:
21:44:59
Can you help me achieving it?
I do not really know where to start!
Thank you
You can do this with substr, str_split and implode
The code is done on multiple lines for clarity, but can easily be done in a chain on one line:
$str = '1010081-COP-8-27-20110616214459';
//Get last 6 chars
$end = substr($str, -6);
//Split string into an array. Each element is 2 chars
$chunks = str_split($end, 2);
//Convert array to string. Each element separated by the given separator.
$result = implode(':', $chunks);
echo preg_replace('/^.*(\d{2})(\d{2})(\d{2})$/', '$1:$2:$3', $string);
It looks to me though like that string has a particular format which you should parse into data. Something like:
sscanf($string, '%u-%3s-%u-%u-%u', $id, $type, $num, $foo, $timestamp);
$timestamp = strtotime($timestamp);
echo date('Y-m-d H:i:s', $timestamp);
If you just want the time:
$time = rtrim(chunk_split(substr($s,-6),2,':'),':');
$final = "1010081-COP-8-27-20110616214459";
$c = substr($final, -2);
$b = substr($final, -4, 2);
$a = substr($final, -6, 2);
echo "$a:$b:$c";

php var to year and month

$date ='20101015';
how to convert to $year = 2010,$month = 10, $day =15
thanks
You can use the PHP substring function substr as:
$year = substr($date,0,4); # extract 4 char starting at position 0.
$month = substr($date,4,2); # extract 2 char starting at position 4.
$day = substr($date,6); # extract all char starting at position 6 till end.
If your original string as leading or trailing spaces this would fail, so its better feed substr trimmed input as. So before you call substr you can do:
$date = trim($date);
You can do it all in one go with
sscanf — Parses input from a string according to a format
Example:
list($y, $m, $d) = sscanf('20101015', '%4d%2d%2d');
or
sscanf('20101015', '%4d%2d%2d', $y, $m, $d);
You can use substring function
http://www.w3schools.com/php/func_string_substr.asp
$year=substr($date,0,4);
$month=substr($date,4,2);
$day=substr($date,6,2);

Categories