Date formatting issue

Post here is you are having problems with any of the tutorials.
Post Reply
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Date formatting issue

Post by geneh23 »

Hey everyone,

So everything works fine as far as functionality but I want to change the date format to display something like "Thu., Apr 25th, 2013 4: 28 PM". I can get every page to show up with this format execpt for the blog_read.php file. I don't know why this is because I've used the same code. Here are my files. Please help! Thanks in advance!

blog_list.php
<?php

include('core/init.inc.php');

?>
<!DOCTYPE html PUBLIC "-//WC3//DTD XHTML 1.0 Strict//EN" "http://www.w3/org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Blog</title>
	</head>
	<body>
		<div>
			<?php
			
			$posts = get_posts();
			
			foreach ($posts as $post){
				?>
				<h2><a href="blog_read.php?pid=<?php echo $post['id']; ?>"><?php echo $post['title']; ?></a></h2>
				<h4>By <?php echo $post['user']; ?> on <?php echo $post['date']; ?></h4>
				<h4>(<?php echo $post['total_comments']; ?> comments, last comment <?php echo $post['last_comment']; ?>)</h4>
				
				<hr />
				
				<p><?php echo $post['preview']; ?></p>
				<?php
			}
			
			?>
		</div>
	</body>
</html>
blog_post.php
<?php

include('core/init.inc.php');

if (isset($_POST['user'], $_POST['title'], $_POST['body'])) {
	add_post($_POST['user'], $_POST['title'], $_POST['body']);
	header('Location: blog_list.php');
	die();
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>

			<form action="" method="post">
			<p>
				<label for="user">Name</label>
				<input type="text" name="user" id="user" />
			</p>
			<p>
				<label for="title">Title</label>
				<input type="text" name="title" id="title" />
			</p>
			<p>
				<textarea name="body" rows="20" cols="60"></textarea>
			</p>
			<p>
				<input type="submit" value="Add Post!" />
			</p>
		</form>
			<br class="clearfix" />
		</div>
		<div id="sidebar">
			<?php include 'includes/sidebar.php' ?>
		</div>
		<br class="clearfix" />
	</div>
	<?php include 'includes/bottom_content.php' ?>
</div>
<?php include 'includes/footer.php' ?>
</body>
</html>
blog_read.php
<?php

include('core/init.inc.php');

if (isset($_GET['pid'], $_POST['user'], $_POST['body'])) {
	if (add_comment($_GET['pid'], $_POST['user'], $_POST['body'])){
		header("Location: blog_read.php?pid={$_GET['pid']}");
	}else{
		header('Location: blog_list.php');
	}
	
	die();
}

?>
<!DOCTYPE html PUBLIC "-//WC3//DTD XHTML 1.0 Strict//EN" "http://www.w3/org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Blog</title>
	</head>
	<body>
		<div>
			<?php
			
			if (isset($_GET['pid']) === false || valid_pid($_GET['pid']) === false) {
				echo 'Invalid post ID.';
			}else{
				$post = get_post($_GET['pid']);
				
				?>
				<h2><?php echo $post['title']; ?></h2>
				<h4>By <?php echo $post['user']; ?> on <?php echo $post['date']; ?> (<?php echo count($post['comments']); ?> comments)</h4>
				
				<hr />
				
				<p><?php echo $post['body']; ?></p>
				
				<hr />
				<?php
				
				foreach ($post['comments'] as $comment){
					?>
					<p><?php echo $comment['body']; ?></p>
					<h4>By <?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
					<hr />
					<?php
				}
				
				?>
				<form action="" method="post">
					<p>
						<label for="user">Name</label>
						<input type="text" name="user" id="user" />
					</p>
					<p>
						<textarea name="body" rows="20" col="60"></textarea>
					</p>
					<p>
						<input type="submit" value="Add Comment!" />
					</p>
				</form>
				<?php
			}
			
			?>
				</div>
	</body>
</html>
init.inc.php
<?php

mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('blog');

include('inc/posts.inc.php');
include('inc/comments.inc.php');

?>
posts.inc.php
<?php

//checks if the given post id is in the table
function valid_pid($pid) {
	$pid = (int)$pid;
	
	$total = mysql_query("SELECT COUNT(`post_id`) FROM `posts` WHERE `post_id` = {$pid}");
	$total = mysql_result($total, 0);
	
	if ($total != 1) {
		return false;
	}else{
		return true;
	}
}

//gets a summary of all blog posts
function get_posts() {
	$sql = "SELECT
				`posts`.`post_id` AS `id`,
				`posts`.`post_title` AS `title`,
				LEFT(`posts`.`post_body`, 512) AS `preview`,
				`posts`.`post_user` AS `user`,
				DATE_FORMAT(`posts`.`post_date`, '%a., %b %D, %Y %l: %i %p') AS `date`,
				`comments`.`total_comments`,
				DATE_FORMAT(`comments`.`last_comment`, '%a., %b %D, %Y %l: %i %p') AS `last_comment`
			FROM `posts`
			LEFT JOIN(
				SELECT
					`post_id`,
					COUNT(`comment_id`) AS `total_comments`,
					MAX(`comment_date`) AS `last_comment`
				FROM `comments`
				GROUP BY `post_id`
			) AS `comments`
			ON `posts`.`post_id` = `comments`.`post_id`
			ORDER BY `posts`.`post_date` DESC";
	
	$posts = mysql_query($sql);
	
 $rows = array();
        while (($row = mysql_fetch_assoc($posts)) !== false) {
                $rows[] = array(
                        'id'                       => $row['id'],
                        'title'                   => $row['title'],
                        'preview'             => $row['preview'],
                        'user'                   => $row['user'],
                        'date'                   => $row['date'],
                        'total_comments' => ($row['total_comments'] === null) ? 0 : $row['total_comments'],
                        'last_comment'     => ($row['last_comment'] === null) ? 'none' : $row['last_comment']
                );
	}
	
	return $rows;
}

//gets a single post from the table
function get_post($pid) {
	$pid = (int)$pid;
	
	$sql = "SELECT
				`post_title` AS `title`,
				`post_body` AS `body`,
				`post_user` AS `user`,
				`post_date` AS `date`
			FROM `posts`
			WHERE `post_id` = {$pid}";
	
	$post = mysql_query($sql);
	$post = mysql_fetch_assoc($post);
	
	$post['comments'] = get_comments($pid);
	
	return $post;
}

//adds a new blog entry
function add_post($name, $title, $body) {
	$name = mysql_real_escape_string(htmlentities($name));
	$title = mysql_real_escape_string(htmlentities($title));
	$body = mysql_real_escape_string(nl2br(htmlentities($body)));
	
	mysql_query("INSERT INTO `posts` (`post_user`, `post_title`, `post_body`, `post_date`) VALUES ('{$name}', '{$title}', '{$body}', NOW())");
}

?>
comments.inc.php
<?php

//gets all of the comments for a given blog post
function get_comments($pid){
	$pid = (int)$pid;
	
	$sql = "SELECT
				`comment_body` AS `body`,
				`comment_user` AS `user`,
				DATE_FORMAT(`comment_date`, '%a., %b %D, %Y %l: %i %p') AS `date`
			FROM `comments`
			WHERE `post_id` = {$pid}";
			
	$comments = mysql_query($sql);
	
	$return = array();
	while(($row = mysql_fetch_assoc($comments)) !== false) {
		$return[] = $row;
	}
	return $return;
}

//adds a comment
function add_comment($pid, $user, $body) {
	if (valid_pid($pid) === false) {
		return false;
	}
	
	$pid 	= (int)$pid;
	$user 	= mysql_real_escape_string(htmlentities($user));
	$body 	= mysql_real_escape_string(nl2br(htmlentities($body)));
	
	mysql_query("INSERT INTO `comments` (`post_id`, `comment_user`, `comment_body`, `comment_date`) VALUES ({$pid}, '{$user}', '{$body}', NOW())");
	
	return true;
}

?>
Again, Thanks for any help!
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

Re: Date formatting issue

Post by Temor »

Could you be a bit more descriptive as to what the problem is? Does it not show at all, or does it show the wrong date or format?
Is anything else acting strange or not working?
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

Sorry, I meant to say that in the post. It posts this format on the blog_list.php page "Thu., Apr 25th, 2013 4: 28 PM" but on the blog_read.php page that looks at one blog post at a time, it shows this format "2013-04-25 16:28:04" and I want it to read the first format.

In the posts.inc.php as well as the comments.inc.php files, I've got this sql format that should output this format: "Thu., Apr 25th, 2013 4: 28 PM" which is this in sql "%a., %b %D, %Y %l: %i %p" and it does output that format on the blog_list.php page but it shows the original "2013-04-25 16:28:04" which I think is %d,%m, %Y %H:%i:%s on the blog_read.php and I can't seem to figure out why it doesn't output the "%a., %b %D, %Y %l: %i %p" format that shows correctly on the blog_list.php.
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

and it shows the right date but in the wrong format
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

Re: Date formatting issue

Post by Temor »

I can't spot what would be causing it, but there is a solution.
Remove the formatting from the SQL statement and fetch just the unformatted timestamp, and use the date() function to format it.
http://php.net/manual/en/function.date.php

This
echo date("D, M jS, Y g: i A",$timestamp); 
will output in this format:
Thu, Apr 18th, 2013 10: 36 PM
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

Sorry for sounding dumb but can you explain what you're trying to say?
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

Re: Date formatting issue

Post by Temor »

Do this in comments.inc.php

Change the SQL statement in this
function get_comments($pid){
        $pid = (int)$pid;
       
        $sql = "SELECT
                                `comment_body` AS `body`,
                                `comment_user` AS `user`,
                                DATE_FORMAT(`comment_date`, '%a., %b %D, %Y %l: %i %p') AS `date`
                        FROM `comments`
                        WHERE `post_id` = {$pid}";
                       
        $comments = mysql_query($sql);
       
        $return = array();
        while(($row = mysql_fetch_assoc($comments)) !== false) {
                $return[] = $row;
        }
        return $return;
}
to this:
function get_comments($pid){
        $pid = (int)$pid;
       
        $sql = "SELECT
                                `comment_body` AS `body`,
                                `comment_user` AS `user`,
                              `comment_date` AS `date`
                        FROM `comments`
                        WHERE `post_id` = {$pid}";
                       
        $comments = mysql_query($sql);
       
        $return = array();
        while(($row = mysql_fetch_assoc($comments)) !== false) {
                $return[] = $row;
        }
        return $return;
}
And then take this from blog.read.php
  foreach ($post['comments'] as $comment){
                                        ?>
                                        <p><?php echo $comment['body']; ?></p>
                                        <h4>By <?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
                                        <hr />
                                        <?php
                                }
and change into the following:
  foreach ($post['comments'] as $comment){
                                        ?>
                                        <p><?php echo $comment['body']; ?></p>
                                        <h4>By <?php echo $comment['user']; ?> on <?php echo date("D, M jS, Y g: i A",$comment['date']); ?></h4>
                                        <hr />
                                        <?php
                                }
This should work.
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

Do I do the same thing for the posts.inc.php and then do the same thing for the post section in the blog_read.php as you did for the comments?
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

Re: Date formatting issue

Post by Temor »

If you want to.
You don't have to if they are working as they should.

If you do it, it's mostly for consistency ( which is good, but not absolutely necessary ).
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

it doesn't do the right format. It shows "Thu, Jan 1st, 1970 1: 33 AM"
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

and the commenting section works fine, it's the post date that wont change but it needs to change with the correct date that It was submitted to the database. So it needs to pull that data and format it correctly.
geneh23
Posts: 8
Joined: Sun Apr 28, 2013 8:39 pm

Re: Date formatting issue

Post by geneh23 »

Nevermind! I solved it! I just added the Date_Format() and added the format that I wanted in the "get_post" function. Now it makes sense..the get_post's' function had the right format as well as the comments function..it only makes sense that the "get_post" function have the same..fail on my part lol sorry for wasting time for you guys..
Post Reply