current_time (‘Zeitstempel’) ist falsch

Ich lege meine Zeitzone in Amerika / Lima (Einstellung> Allgemein)

Aber current_time (‘timestamp’) zeigt andere Datumswerte an.

Zum Beispiel: Jetzt in Lima ist es 2015-10-25 12:01:00 aber current_time (‘Zeitstempel‘) sagt: 2016-10-24 19:01:05

Etwas mache ich falsch?

PD: Meine Variablen in wp_option sind: gmt_offset ist leer, timezone_string ist Amerika / Lima

Grüße

Solutions Collecting From Web of "current_time (‘Zeitstempel’) ist falsch"

Versuchen Sie, einen zweiten Parameter einzugeben, um den GMT-Offset zu verwenden.

current_time( 'timestamp', true ); 

DateTimeZone Sie die DateTimeZone eines DateTime Objekts fest, um die richtige Zone sicherzustellen.

 $d = date( 'c', time() ); echo $d . '

'; $timezone = get_option('timezone_string'); if( empty($timezone) ) $timezone = 'America/Lima'; $t = new DateTime($d); $t->setTimezone(new DateTimeZone( $timezone )); echo "\tTime in ${timezone}\t" . $t->format( 'c' ); // 2016-10-25T06:10:16+00:00 // Time in America/Lima 2016-10-25T01:10:16-05:00

Cool! Danke für die Antwort, es hat mir sehr geholfen.

Ich versuche meine unbezahlten Bestellungen zu erhalten, annulliere sie automatisch nach einer gewissen Zeit in WooCommerce. Es funktioniert nicht, da dies current_time (‘timestamp’) standardmäßig verwendet.

woocommerce / includes / wc-order-functions.php

 function wc_cancel_unpaid_orders() { global $wpdb; $held_duration = get_option( 'woocommerce_hold_stock_minutes' ); if ( $held_duration < 1 || get_option( 'woocommerce_manage_stock' ) != 'yes' ) return; $date = date( "Ymd H:i:s", strtotime( '-' . absint( $held_duration ) . ' MINUTES', current_time( 'timestamp' ) ) ); $unpaid_orders = $wpdb->get_col( $wpdb->prepare( " SELECT posts.ID FROM {$wpdb->posts} AS posts WHERE posts.post_type IN ('" . implode( "','", wc_get_order_types() ) . "') AND posts.post_status = 'wc-pending' AND posts.post_modified < %s ", $date ) ); if ( $unpaid_orders ) { foreach ( $unpaid_orders as $unpaid_order ) { $order = wc_get_order( $unpaid_order ); if ( apply_filters( 'woocommerce_cancel_unpaid_order', 'checkout' === get_post_meta( $unpaid_order, '_created_via', true ), $order ) ) { $order->update_status( 'cancelled', __( 'Unpaid order cancelled - time limit reached.', 'woocommerce' ) ); } } } } 

Dann kann ich diesen Code nicht ändern. Dies verwendet immer current_time (‘timestamp’).

Dann, wenn ich eine Bestellung speichere, ist sein Datum 2016-10-25 11:20:11 Uhr, aber urrent_time (‘Zeitstempel’) sagt 2016-10-25 06:20:11 .

Etwas mache ich falsch?

PD: Meine Variablen in wp_option sind: gmt_offset ist leer, timezone_string ist Amerika / Lima

Grüße

Es hört sich an, als hätten Sie irgendwo Code, der die Standardzeitzone in PHP in Ihre Zeitzone ändert, anstatt sie als UTC-Zeitzone allein zu lassen.

Im Grunde hat entweder Ihre PHP.INI-Datei American / Lima (wenn es als UTC allein gelassen werden sollte) oder etwas ruft date_default_timezone_set () mit America / Lima auf.

In diesem Fall würden die normalen functionen PHP time () und date () die Zeit in der lokalen Zeitzone (America / Lima) zurückgeben und WordPress würde sie dann “überkorrigieren”, indem sie die Zeitzonenänderung zum zweiten Mal erneut anwendet.

Zum Lösen müssen Sie nach anderem Code suchen, der date_default_timezone_set aufruft, und ihn deaktivieren. WordPress erwartet, dass die Zeitzone in PHP UTC ist, und wendet die Korrektur selbst an, anstatt PHP anzuwenden. Dies ist hauptsächlich aus Legacy-Gründen. PHP 4 hatte keine gute Zeitzonen-Handhabung, daher erwartet ein großer Teil des existierenden Codes, dass WordPress es auf diese Weise behandelt.