2

Thank you to anyone who can help. I'm trying to use PHP to get a delivery date that is X days from any given current day. This is to use with the Google Survey Opt-in code and WooCommerce in WordPress.

Referencing this thread: WooCommerce fill-in fields for Google Survey Opt-In Code

Google wants dynamic values, explained here: https://support.google.com/merchants/answer/7106244?hl=en&ref_topic=7105160#example

I have most of the code ready to go, but this dynamic date has been hard to figure out.

I think the simplest solution is to just add a number of days to the day of a product order, which can happen on any given day.

My question is: how do I get PHP to calculate that in this context?

My understanding is that there is DateTime and there is strtotime, but DateTime is the more recent and 'right' way to do this?

This is what I've got so far, but I'm not sure it's right:

    //Google Survey code 
function wh_CustomReadOrder($order_id) {
    //getting order object
    $order = wc_get_order($order_id);
    $email = $order->billing_email;
    ?>
    <script src="https://apis.google.com/js/platform.js?onload=renderOptIn" async defer></script>
    <script>
        window.renderOptIn = function () {
            window.gapi.load('surveyoptin', function () {
                window.gapi.surveyoptin.render(
                        {
                            "merchant_id": [merchant id],
                            "order_id": "<?php echo $order_id; ?>",
                            "email": "<?php echo $email; ?>",
                            "delivery_country": "CA",
                            "estimated_delivery_date": "<?php
$inOneWeek = new \DateTime("+7 day");
echo $date->format("Y-m-d");
?>"
                        }
                );
            });
        };
    </script>
    <?php
}

add_action('woocommerce_thankyou', 'wh_CustomReadOrder');
joycegrace
  • 29
  • 3

2 Answers2

4

You could apply this in the following way, comment with explanation added in the code.

Functions used:

  • date_i18n() - Retrieves the date in localized format, based on a sum of Unix timestamp and timezone offset in seconds.
  • date - Returns a string formatted according to the given format string using the given integer timestamp or the current time if no timestamp is given. In other words, timestamp is optional and defaults to the value of time().
    • Y - A full numeric representation of a year, 4 digits
    • m - Numeric representation of a month, with leading zeros
    • d - Day of the month, 2 digits with leading zeros

Also used: "How to get WooCommerce order details"


//Google Survey code 
function wh_CustomReadOrder($order_id) {
    // Get order object
    $order = wc_get_order($order_id);

    // Get billing email
    $email = $order->get_billing_email();

    // Get order date
    $date_created = $order->get_date_created();

    // Add days
    $days = 7;

    // Date created + 7 days
    $estimated_delivery_date = date_i18n( 'Y-m-d', strtotime( $date_created ) + ( $days * 24 * 60 * 60 ) );

    ?>
    <script src="https://apis.google.com/js/platform.js?onload=renderOptIn" async defer></script>
    <script>
    window.renderOptIn = function () {
        window.gapi.load('surveyoptin', function () {
            window.gapi.surveyoptin.render({
                "merchant_id": [merchant id],
                "order_id": "<?php echo $order_id; ?>",
                "email": "<?php echo $email; ?>",
                "delivery_country": "CA",
                "estimated_delivery_date": "<?php echo $estimated_delivery_date; ?>"
            });
        });
    };
    </script>
    <?php   
}
add_action('woocommerce_thankyou', 'wh_CustomReadOrder', 10, 1 );
7uc1f3r
  • 28,449
  • 17
  • 32
  • 50
0

echo date("Y-m-d", strtotime("+7 day"));

edit: if you don't want today and want an arbitrary date:

$timestamp = 1590097999; echo date("Y-m-d", strtotime("+7 day", $timestamp));

drussey
  • 665
  • 4
  • 9
  • Hi, I'm very curious what is the "1590097999" for? How does it create an arbitrary date? Just trying to understand this coding world. Thank you for your time. Also which edit was this for? – joycegrace May 22 '20 at 22:25
  • 1590097999 is just an int. You could get the current time from time() or you could get it from a from a database or file or any source. It just needs to be a number representing the number of seconds elapsed from 1970-1-1 to that date. – drussey May 24 '20 at 00:11