Kaliphornia Posted April 23, 2014 Share Posted April 23, 2014 Hi all, I'm a PHP coder who sucks at date manipulation. Here's the problem: I have code that builds and manipulates a bunch of dates, starting from 2 "main" date values. Then it changes the main dates via date_add & date_sub. It works just fine if all I want to do is print the date values inside a "while" loop. See example here:http://gardencalc.drivingpeace.com/results1.php However, now I need to load everything into an array and pass it to a grid widget. Date_add & date_sub appear to change not only the orginal "main" date values, but also the values of any other variables created from the original date, so all date values become the same. See grid widget example here: http://gardencalc.drivingpeace.com/grid.htm I need to somehow change the dates inside some logic code, capture the saved changes into the array, then pass the array to the widget. Like I said, I suck at date functions, and I need an alternative to date_add, etc. PHP code for the grid widget is below. Any suggestions are most welcome. I imagine there's an easy answer, but I'm stumped! Thanks! <?php $loc_id = 174; $prob_id = 10; #Include the connect.php file include('connect.php'); #Connect to the database //connection String $connect = mysql_connect($hostname, $username, $password) or die('Could not connect: ' . mysql_error()); //select database mysql_select_db($database, $connect); //Select The database $bool = mysql_select_db($database, $connect); if ($bool === False){ print "can't find $database"; } $tempSQL = "SELECT * FROM prob_28 WHERE prob_id=$loc_id"; $temp = mysql_query($tempSQL) or die(mysql_error()); while($row = mysql_fetch_array( $temp )) { $prob1_90 = $row['prob1_90']; $prob1_50 = $row['prob1_50']; $prob1_10 = $row['prob1_10']; $prob2_10 = $row['prob2_10']; $prob2_50 = $row['prob2_50']; $prob2_90 = $row['prob2_90']; } //build the dates if ($prob_id == "10"){ $first_frost_date = date_create(date("Y").'-'.substr($prob1_10,0,2).'-'.substr($prob1_10,2,2)); $last_frost_date = date_create(date("Y").'-'.substr($prob2_10,0,2).'-'.substr($prob2_10,2,2)); }elseif ($prob_id == "50"){ $first_frost_date = date_create(date("Y").'-'.substr($prob1_50,0,2).'-'.substr($prob1_50,2,2)); $last_frost_date = date_create(date("Y").'-'.substr($prob2_50,0,2).'-'.substr($prob2_50,2,2)); }else{ $first_frost_date = date_create(date("Y").'-'.substr($prob1_90,0,2).'-'.substr($prob1_90,2,2)); $last_frost_date = date_create(date("Y").'-'.substr($prob2_90,0,2).'-'.substr($prob2_90,2,2)); } // get data and store in a json array $query = "SELECT * FROM data ORDER BY data_id"; $result = mysql_query($query) or die("SQL Error 1: " . mysql_error()); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $curcrop = array(); $data_id = $row['data_id']; $days_to_harvest = $row['days_2_harvest']; $resolution = $row['resolution']; //Get type name $type_id = $row['type_id']; $type = mysql_query("SELECT * FROM type WHERE type_id=$type_id") or die(mysql_error()); while($typerow = mysql_fetch_array( $type )) { $curcrop['Type'] = $typerow['type_name']; } //Get planting method name $method_id = $row['method_id']; $method = mysql_query("SELECT * FROM method WHERE method_id=$method_id") or die(mysql_error()); while($methodrow = mysql_fetch_array( $method )) { $curcrop['Method'] = $methodrow['method_name']; } //Get crop name $crop_id = $row['crop_id']; $crop = mysql_query("SELECT * FROM crop WHERE crop_id=$crop_id") or die(mysql_error()); while($croprow = mysql_fetch_array( $crop )) { $curcrop['Crop'] = $croprow['crop_name']; } //calculate the direct sow date //Only build real date if the planting method is direct sow if ($method_id == 1){ //check if it's a fall or spring crop type //spring date if ($type_id == 1){ $direct_sow_date = $first_frost_date; $date_int = $row['wks_b4_frost_2_sow'] * 7; date_sub($direct_sow_date,date_interval_create_from_date_string("$date_int days")); //fall date }else{ $direct_sow_date = $last_frost_date; $date_int = $row['wks_b4_first_frost'] * 7; date_sub($direct_sow_date,date_interval_create_from_date_string("$date_int days")); } }else{ $direct_sow_date = null; } $curcrop['SowDirect'] = $direct_sow_date; //calculate transplant date if ($method_id == 2){ //check if it's a fall or spring crop type //spring date if ($type_id == 1){ $transplant_date = $first_frost_date; $date_int = $row['wks_b4_last_frost_2_trans'] * 7; date_sub($transplant_date,date_interval_create_from_date_string("$date_int days")); //fall date }else{ $transplant_date = $last_frost_date; $date_int = $row['wks_b4_first_frost'] * 7; date_sub($transplant_date,date_interval_create_from_date_string("$date_int days")); } }else{ $transplant_date = null; } //transplant sow date if ($transplant_date != null){ $date_int_trans = $row['wks_2_grow_trans'] * 7; date_sub($transplant_date,date_interval_create_from_date_string("$date_int_trans days")); $curcrop['SowTransplant'] = $transplant_date; date_add($transplant_date,date_interval_create_from_date_string("$date_int_trans days")); }else{ $curcrop['SowTransplant'] = null; } $curcrop['Transplant'] = $transplant_date; //begin harvest date if ($method_id == 1 && $direct_sow_date != null){ date_add($direct_sow_date,date_interval_create_from_date_string("$days_to_harvest days")); date_sub($direct_sow_date,date_interval_create_from_date_string("$resolution days")); $curcrop['BeginHarvest'] = $direct_sow_date; date_sub($direct_sow_date,date_interval_create_from_date_string("$days_to_harvest days")); date_add($direct_sow_date,date_interval_create_from_date_string("$resolution days")); } if ($method_id == 2 && $transplant_date != null){ date_add($transplant_date,date_interval_create_from_date_string("$days_to_harvest days")); date_sub($transplant_date,date_interval_create_from_date_string("$resolution days")); $curcrop['BeginHarvest'] = $transplant_date; date_sub($transplant_date,date_interval_create_from_date_string("$days_to_harvest days")); date_add($transplant_date,date_interval_create_from_date_string("$resolution days")); } //end harvest date if ($method_id == 1 && $direct_sow_date != null){ date_add($direct_sow_date,date_interval_create_from_date_string("$days_to_harvest days")); date_add($direct_sow_date,date_interval_create_from_date_string("$resolution days")); $curcrop['EndHarvest'] = $direct_sow_date; date_sub($direct_sow_date,date_interval_create_from_date_string("$days_to_harvest days")); date_sub($direct_sow_date,date_interval_create_from_date_string("$resolution days")); date_add($direct_sow_date,date_interval_create_from_date_string("$date_int days")); } if ($method_id == 2 && $transplant_date != null){ date_add($transplant_date,date_interval_create_from_date_string("$days_to_harvest days")); date_add($transplant_date,date_interval_create_from_date_string("$resolution days")); $curcrop['EndHarvest'] = $transplant_date; date_sub($transplant_date,date_interval_create_from_date_string("$days_to_harvest days")); date_sub($transplant_date,date_interval_create_from_date_string("$resolution days")); date_add($transplant_date,date_interval_create_from_date_string("$date_int days")); } $crops[] = $curcrop; } echo json_encode($crops); ?> grid_data1.php Quote Link to comment https://forums.phpfreaks.com/topic/287983-problem-with-date_add-date_sub/ Share on other sites More sharing options...
mac_gyver Posted April 24, 2014 Share Posted April 24, 2014 you are using php datetime objects and the date_add/date_sub functions/methods are modifying the instance of the datetime object. these are not values, they are instances of a class/object. it's also a safe bet that your grid widget expects an array of literal date strings. to output or store to an array entry, the current value of your datetime object as a literal string, you need to use the date_format() function/method. Quote Link to comment https://forums.phpfreaks.com/topic/287983-problem-with-date_add-date_sub/#findComment-1477139 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.