তারিখ_এল 18n () এর সাথে টাইমস্ট্যাম্পগুলি স্থানীয় সময়ে রূপান্তর করা হচ্ছে


15

আমি একটি ওয়ার্ডপ্রেস ক্রোন জব পেয়েছি যা সময় সময় একটি ইমেল প্রেরণ করে এবং বিকল্প হিসাবে পাঠানো হলে টাইমস্ট্যাম্পটি সংরক্ষণ করে এবং আমি সেটিংসের পৃষ্ঠায় একটি তারিখ প্রদর্শন করতে চাই। এর মতো কিছু, "শেষ ইমেলটি 'x' এ প্রেরণ করা হয়েছিল"। আমি মার্কিন পশ্চিম উপকূলে আছি, সুতরাং আমাদের সময়টি বর্তমানে ইউটিসির সাত ঘন্টা অবকাশ।

তারিখ_আই 18 এন () থেকে আমার প্রত্যাশিত আউটপুট, এটি টাইমস্ট্যাম্পটি পাস করার পরে, ইউটিসি থেকে সাত ঘন্টা সমন্বয়ের সাথে স্থানীয়ভাবে ফর্ম্যাট করা তারিখ হবে। তবে এটি ইউটিসিতে সময় দেয়। এমনকি বর্তমান সময়টি পাওয়ার চেষ্টা করেও আমি প্রত্যাশিত আউটপুট হিসাবে যা ভাবি তা ফিরিয়ে দেয় না।

উদাহরণস্বরূপ: echo date_i18n('F d, Y H:i');আউটপুটস এপ্রিল 05, 2013 11:36 হিসাবে প্রত্যাশিত, তবে ফলাফল echo date_i18n('F d, Y H:i',time());এপ্রিল 05, 2013 18:36।

এটা কি ইচ্ছাকৃত? কীভাবে আমি একটি পূর্বনির্ধারিত টাইম স্ট্যাম্প থেকে স্থানীয়ভাবে ফর্ম্যাট করা তারিখটি ফিরিয়ে দিতে পারি? কোন সাহায্যের জন্য ধন্যবাদ।


আপনি কি আপনার টাইমজোনটি সেটিংস-> সাধারণ এ সেট করেছেন?
ভ্যানকোডার

হ্যাঁ, লস অ্যাঞ্জেলেসের কাছে
অ্যান্ড্রু বার্টেল

উত্তর:


31

আমি জানি যে আমি তিন মাস দেরি করে ফেলেছি তবে আপনি যে ফাংশনটি এখানে চান তা হল ওয়ার্ডপ্রেস ' get_date_from_gmt()

ফাংশনটি Y-m-d H:i:sপ্রথম প্যারামিটার হিসাবে ফর্ম্যাটে একটি জিএমটি / ইউটিসি তারিখ এবং দ্বিতীয় প্যারামিটার হিসাবে আপনার পছন্দসই তারিখের বিন্যাস গ্রহণ করে। সেটিংসের স্ক্রিনে সেট হওয়ার সাথে সাথে এটি আপনার তারিখটিকে স্থানীয় সময় অঞ্চলে রূপান্তর করবে।

ব্যবহারের উদাহরণ:

echo get_date_from_gmt( date( 'Y-m-d H:i:s', $my_unix_timestamp ), 'F j, Y H:i:s' );


2
খুনি ধন্যবাদ, এই মুহূর্তে আমার বিজ্ঞপ্তিগুলিতে এই পপআপটি দেখেছি। আমি এটি সঠিক উত্তরে স্যুইচ করেছি।
অ্যান্ড্রু বার্টেল

1
আমি তারিখ এবং সময় কনফিগারেশন যুক্ত করেছি: echo get_date_from_gmt ( date( 'Y-m-d H:i:s', $my_timestamp ), get_option('date_format') . ' - '. get_option('time_format') );
নাবিল কাদিমি

@ নাবিলকাডিমি এটি একটি দুর্দান্ত সংযোজন, তবে এটি এখনও স্ট্রিংটিকে সঠিক ভাষায় অনুবাদ করে না। এমন কোনও ফাংশনের জন্য আমার উত্তর দেখুন যা কনফিগার করা ভাষা, টাইমজোন এবং তারিখ বিন্যাসের তিনটিই বিবেচনা করে।
ফ্লিম 18

5

কোডেক্স থেকে :

কারেন্ট_টাইম ('টাইমস্ট্যাম্প') সময় () এর পরিবর্তে ব্লগের স্থানীয় সময় ফিরে আসতে ব্যবহার করা উচিত। ওয়ার্ডপ্রেসে পিএইচপি-র সময় () সর্বদা ইউটিসি ফিরবে এবং কারেন্ট_টাইম ('টাইমস্ট্যাম্প', সত্য) কল করার সমান।

এটা চেষ্টা কর:

define( 'MY_TIMEZONE', (get_option( 'timezone_string' ) ? get_option( 'timezone_string' ) : date_default_timezone_get() ) );
date_default_timezone_set( MY_TIMEZONE );
echo date_i18n('F d, Y H:i', 1365194723);

এটি স্ক্রিপ্টের সময়কালের জন্য ডাব্লুপি'র টাইমজোন_ স্ট্রিং বিকল্পে ডিফল্ট পিএইচপি তারিখ সেট করে।


1
ঠিক আছে, তবে আমার যদি একটি নির্বিচার টাইমস্ট্যাম্প থাকে? কয়েক দিন আগে থেকে বলুন, আমি ইউটিসি সময়ের চেয়ে অ্যাডজাস্টেড সময়টি কীভাবে পাব?
অ্যান্ড্রু বার্টেল

date_i18n('F d, Y H:i', $your_timestamp)কাজ করে না?
ভ্যানকোডার

না, এমনকি 2012 সালে একটি ভ্যানিলা ডাব্লুপি ইনস্টল করার চেষ্টা করেও কেবল এই echo date_i18n('F d, Y H:i',1365194723)বিবৃতিটি ইনডেক্স.এফপি শীর্ষে চালানো হয়েছে , যা ইউএস ওয়েস্ট কোস্টের সময়ের চেয়ে আমাকে ইউটিসি দেয়।
অ্যান্ড্রু বার্টেল

আপনি ঠিক বলেছেন, দেখে মনে হচ্ছে তারিখ_আই 18 এন মূলত তারিখের বিন্যাসের পরিবর্তে তারিখগুলির স্থানীয় ফর্ম্যাটিংয়ের জন্য। আমি আমার উত্তর আপডেট করেছি।
ভ্যানকোডার 21

হ্যাঁ, আমি নিজেই টাইমজোনটি ম্যানুয়ালি সেট করা থেকে বিরত থাকার প্রত্যাশা করছিলাম, তবে যদি এটিই একমাত্র উপায়, তবে তা হয়ে যান। উত্তর হিসাবে চিহ্নিত, সাহায্যের জন্য ধন্যবাদ।
অ্যান্ড্রু বার্টেল

2

date_i18n($format, $timestamp)স্থানীয় অনুযায়ী ফর্ম্যাটগুলি, তবে সময় অঞ্চল নয়। get_date_from_gmt($datestring, $format)টাইমজোন অনুযায়ী ফর্ম্যাট, তবে লোকেল নয় not সময় অঞ্চল এবং লোকাল উভয় অনুসারে ফর্ম্যাট করতে , আমি নিম্নলিখিতটি করছি:

function local_date_i18n($format, $timestamp) {
    $timezone_str = get_option('timezone_string') ?: 'UTC';
    $timezone = new \DateTimeZone($timezone_str);

    // The date in the local timezone.
    $date = new \DateTime(null, $timezone);
    $date->setTimestamp($timestamp);
    $date_str = $date->format('Y-m-d H:i:s');

    // Pretend the local date is UTC to get the timestamp
    // to pass to date_i18n().
    $utc_timezone = new \DateTimeZone('UTC');
    $utc_date = new \DateTime($date_str, $utc_timezone);
    $timestamp = $utc_date->getTimestamp();

    return date_i18n($format, $timestamp, true);
}

উদাহরণ প্রোগ্রাম:

$format = 'F d, Y H:i';
$timestamp = 1365186960;
$local = local_date_i18n($format, $timestamp);
$gmt = date_i18n($format, $timestamp);
echo "Local: ", $local, " UTC: ", $gmt;

লস অ্যাঞ্জেলেসের সময় অঞ্চল জন্য আউটপুট:

স্থানীয়: এপ্রিল 05, 2013 11:36 ইউটিসি: এপ্রিল 05, 2013 18:36

তথ্যসূত্র:


0

আপনার টাইমস্ট্যাম্পে অফসেট টাইমজোন যুক্ত করুন।

$offset = get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;
return date_i18n( get_option( 'date_format' ), $ts + $offset );

বা আরও ভাল;

$tz = new DateTimeZone( get_option( 'timezone_string' ) );
$offset_for_that_time = timezone_offset_get ( $tz , new DateTime("@{$ts}") );
return date_i18n ( get_option( 'date_format' ), $ts + offset_for_that_time );

0

ইউটিসিকে ওয়ার্ডপ্রেস বিকল্পগুলিতে টাইমজোন, ভাষা এবং ফর্ম্যাটে স্ট্রিংয়ে রূপান্তর করা

আমি একটি ভাল-ডকুমেন্ট ফাংশন তৈরি করেছি যা ইউটিসিতে একটি ডেট-টাইম স্ট্রিংকে সঠিক ভাষা, ফর্ম্যাট এবং টাইমজোনকে সুন্দর তারিখ-কালীন স্ট্রিংয়ে রূপান্তর করে। এটিকে অনুলিপি করুন

উদাহরণস্বরূপ, "2019-05-30 18:06:01"(ইউটিসি তে) পাস করার সময় ফিরে আসত "Maggio 30, 2019 10:06 am"

/**
 * Given a string with the date and time in UTC, returns a pretty string in the
 * configured language, format and timezone in WordPress' options.
 *
 * @param string $utc_date_and_time 
 *      e.g: "2019-05-30 18:06:01"
 *      This argument must be in UTC.
 * @return string 
 *      e.g: "Maggio 30, 2019 10:06 am"
 *      This returns a pretty datetime string in the correct language and
 *      following the admin's settings.
 */
function pretty_utc_date( string $utc_date ): string {
    if (! preg_match( '/^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$/', $utc_date ) ) {
        /* I have not tested other formats, so only this one allowed. */
        throw new InvalidArgumentException( "Expected argument to be in YYYY-MM-DD hh:mm:ss format" );
    }

    $date_in_local_timezone = get_date_from_gmt( $utc_date );

    /* $date_in_local_timezone is now something like "2019-05-30 10:06:01"
     * in the timezone of get_option( 'timezone_string' ), configured in
     * WordPress' general settings in the backend user interface.
     */

    /* Unfortunately, we can't just pass this to WordPress' date_i18n, as that
     * expects the second argument to be the number of seconds since 1/Jan/1970
     * 00:00:00 in the timezone of get_option( 'timezone_string' ), which is not the
     * same as a UNIX epoch timestamp, which is the number of seconds since
     * 1/Jan/1970 00:00:00 GMT. */
    $seconds_since_local_1_jan_1970 =
        (new DateTime( $date_in_local_timezone, new DateTimeZone( 'UTC' ) ))
        ->getTimestamp();
    // e.g: 1559210761

    /* Administrators can set a preferred date format and a preferred time
     * format in WordPress' general settings in the backend user interface, we
     * need to retrieve that. */
    $settings_format = get_option( 'date_format' ) . ' '. get_option( 'time_format' );
    // $settings_format is in this example "F j, Y g:i a"

    /* In this example, the installation of WordPress has been set to Italian,
     * and the final result is "Maggio 30, 2019 10:06 am" */
    return date_i18n( $settings_format, $seconds_since_local_1_jan_1970 );

}

তথ্যসূত্র:


-1

এটিই আমার মেশিনে কাজ করছে বলে মনে হয় (অন্য কোনও জিনিসই কাজ করে না):

$tz = new DateTimeZone(get_option('timezone_string'));
$dtz = new DateTimeZone('GMT');
foreach($posts as $key => $post){
    $gmt_date = DateTime::createFromFormat('Y-m-d H:i:s', $post->PostDateGMT, $dtz);
    $gmt_date->setTimeZone($tz);
    $posts[$key]->PostDateGMT = $gmt_date->format('Y-m-d H:i:s');
}

আসল কোড: https://www.simonholywell.com/post/2013/12/convert-utc-to-local-time/

এটি ব্যবহার করছে না date_l18n()তবে আমি অনুমান করি যে পরে কেউ এটি ব্যবহার করতে পারে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.