প্রোগ্রামিয়ালি ড্রুপাল 7 এ তারিখের ক্ষেত্রগুলি সেট করুন: তারিখ, তারিখ (আইএসও ফর্ম্যাট) এবং তারিখ (ইউনিক্স টাইমস্ট্যাম্প)


11

ফর্ম এপিআই এবং হুক_ফর্ম_াল্টার () ব্যবহার করে , আমি কীভাবে একটি বৈধ ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করে ড্রুপাল 7 এর তারিখের ক্ষেত্রের ধরণের প্রতিটিের জন্য ম্যানুয়ালি (বল প্রয়োগ) সেট করতে পারি?

ফর্মটি অবশেষে ক্ষেত্রের_সামগ্রী জমা দেওয়ার পরে সর্বদা খালি অ্যারে থাকে। নীচে আমি ভাঙ্গা কোড থেকে কাজ করছি।

hook_form_alter(&$form, &$form_state, $form_id) {

    // http://drupal.org/node/1455576 - Date
    $form['field_date'][LANGUAGE_NONE][0]['value'] = time();

    // http://drupal.org/node/1455576 - Date (ISO Format)
    $form['field_date_iso_format'][LANGUAGE_NONE][0]['value'] = time();

    // http://drupal.org/node/1455576 - Date (Unix Timestamp)
    $form['field_date_unix_timestamp'][LANGUAGE_NONE][0]['value'] =time();
}

আমার উল্লেখ করা উচিত ক্ষেত্রগুলির উইজেটটি পাঠ্যে সেট করা আছে এবং এটির ফর্ম্যাটটি 'ওয়াইএমডি এইচ: আই: এস'

date('Y-m-d H:i:s', time())পরিবর্তে চেষ্টাও করেছি time()

উদাহরণস্বরূপ dpm () আউটপুট।

উদাহরণস্বরূপ dpm () আউটপুট

আমার এটিও নোট করা উচিত যে আমি যদি কর্মক্ষেত্র হিসাবে hook_node_presave () এ পরিবর্তন করে তবে ক্ষেত্রটি সেট করতে পারি । এটি করার জন্য আমি সেট $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);করেছি আমি তারপরে hook_for_alter ব্যবহার করে এটি কীভাবে করবেন তা এখনও বুঝতে চাই।


এই কোডটি কীভাবে ভেঙে গেছে?
কাউন্টজারো

উভয় তারিখ ('Ym-d', strtotime ('31 মে 2011 ')) এবং সময় () সর্বদা খালি থাকে। আমি ভাবতে শুরু করছি যে আমি তারিখগুলির জন্য ভুল অ্যারে ব্যবহার করছি। $ ফর্ম ['তারিখ_ফিল্ড'] ['আনড'] [0] ['মান'] সঠিক নাও হতে পারে? দস্তাবেজে এটি ফিরে।
সিট্রিকগুই

ফর্মটি অবশেষে ক্ষেত্রের_সামগ্রী জমা দেওয়ার পরে সর্বদা খালি অ্যারে থাকে।
সিট্রিকগুই

আপনি সেট করার চেষ্টা করেছেন $form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']?
কাউন্টজারো

ক্ষেত্রটি থেকে স্থানীয়ভাবে সংরক্ষণ করা ফর্ম্যাটটি পরীক্ষা করতে আপনি কোনও কাস্টম কোড অপসারণ এবং ইউআই থেকে ফর্ম জমা দিতে পারেন না?
উইটিইউকে

উত্তর:


14

এখানে এমন একটি কোড যা সাইটের টাইমজোনকে আমার জন্য সরাসরি ব্যবহার করে:

 $node->field_date[LANGUAGE_NONE][0] = array(
    'value' => format_date(strtotime('now'), 'custom', 'Y-m-d H:i:s', 'UTC'),
    'timezone' => 'UTC',  
    'timezone_db' => 'UTC',
  );

1
5 বছর পরে এটি এখনও একটি ভাল উত্তর। এটি ব্যবহার করার পরেও কি বোধগম্য হবে না 'timezone' => variable_get('date_default_timezone', 'UTC'),?
মার্চভ্যান্ডেন্ড

6

প্রতিটি তারিখের ক্ষেত্রের ধরণটি আলাদাভাবে ফর্ম্যাট করা টাইমস্ট্যাম্পের প্রত্যাশা করে (এটি কীভাবে ডেটাবেসে সঞ্চিত থাকে তার উপর ভিত্তি করে):

// For datetime
$node->field_datetest[$node->language][0]['value'] = "2011-05-25 10:35:58";

// For date
$node->field_datetest[$node->language][0]['value'] = "2011-05-25T10:35:58";

// For datestamp
$node->field_datetest[$node->language][0]['value'] = strtotime("2011-05-25 10:35:58");

মনে রাখবেন যে আপনার একটি সম্পূর্ণ তারিখ নির্দিষ্ট করার দরকার নেই; ডেটটাইম এবং তারিখের জন্য আপনি কেবল জিরো দিয়ে প্যাড করতে পারেন, যেমন "2011-05-00 00:00:00" (তারিখের সময়), "2011-00-00T00: 00: 00" (তারিখ) ইত্যাদি। ডেটস্ট্যাম্পের জন্য আপনি ঠিক পেরেছিলেন যেমন স্ট্রোটোটাইম ("2011-05-25") করুন।

গুরুত্বপূর্ণ: এছাড়াও নোট করুন যে আপনি যে নির্দিষ্ট মানটি নির্দিষ্ট করেছেন তা ডেটাবেজে সংরক্ষণ করা হবে, যদিও সময় প্রদর্শিত হবে সময় সময় সেটিংসের উপর নির্ভর করে সাইটে প্রদর্শিত প্রকৃত সময়টি ভিন্ন হতে পারে। আপনি যখন একটি নতুন ডেটটাইম / তারিখ / তারিখের স্ট্যাম্প ক্ষেত্র তৈরি করেন, তখন আপনি পাঁচটি ভিন্ন সময় টাইপ অঞ্চল হ্যান্ডলিং পদ্ধতির মধ্যে চয়ন করতে পারেন। ডিফল্টটি হ'ল "সাইটের সময় অঞ্চল":

ক্ষেত্রের মধ্যে ডেটা প্রবেশ করার সময়, প্রবেশ করা ডেটা সাইটের সময় অঞ্চল হিসাবে ধরে নেওয়া হয়। ডেটাবেসে ডেটা সংরক্ষণ করা হলে এটি ইউটিসিতে রূপান্তরিত হয়। তবে আপনি যদি উপরের উদাহরণের মতো প্রোগ্রামের মতো কোনও তারিখের ক্ষেত্রটি সেট করেন তবে কোনও রূপান্তর হয় না, তাই ক্ষেত্রের টাইমজোন সেটিংসের জন্য আপনার অ্যাকাউন্ট হয়েছে তা নিশ্চিত করুন। বা অন্য কথায়, আপনি যদি "সাইটের সময় অঞ্চল" ব্যবহার করেন তবে সময়টি ইউটিসি-তে রয়েছে কিনা তা নিশ্চিত করুন।

ফুনিঞ্জার ব্লগে তারিখের ক্ষেত্র (তারিখের সময়, তারিখ, তারিখের স্ট্যাম্প ) লেবেলযুক্ত বিভাগটি থেকে এই তথ্যটি উল্লেখ করা হয়েছিল ।

এটি ড্রুপাল 7 এ প্রোগ্রাম্যাটিক নোড তৈরির জন্য একটি দুর্দান্ত সাধারণ সংস্থানও।


মান কীগুলির আশেপাশে আপনার উদ্ধৃতিগুলি দরকার
মাস্টারচার্ফ

ধন্যবাদ মাস্টারশিফ! আপনার উন্নতি প্রতিফলিত আপডেট।
MD3

5

এটি আমার পক্ষে কাজ করেছে।

$node->field_date[LANGUAGE_NONE][0] = array(
      'value' => date('Y-m-d H:i:s', strtotime('now')),
      'timezone' => 'UTC',
      'timezone_db' => 'UTC',
);

2

time()মান এই পর্যায়ে কাজ করবে না।

আপনাকে এর মতো কিছু ব্যবহার করতে হবে:

$mydate = date('Y-m-d', strtotime('31 May 2011'));

এটি আমার জন্য hook_node_presave এ কাজ করে তবে হুক_ফর্ম_ল্টারে নয়।
সাইট্রিকগুই

আপনি কি $form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']উপরে বর্ণিত হিসাবে সেট করার চেষ্টা করেছেন?
কাউন্টজারো

এটি pres নোড-> ফিল্ড_ডেটে [LANGUAGE_NONE] [0]
সিট্রিকগুই

হুক_ফর্ম_ল্টার দিয়ে কাজ করছেন না ... কোন সাহায্য?
রাজেশ বিশ্বকর্মা

2

তারিখের জিনিসগুলির জন্য আমরা বর্তমান তারিখ পাওয়ার জন্য একটি জেএস লিখতে পারি ...

jQuery(document).ready(function() {

    var fullDate = new Date()
    var HR_fullDate = fullDate.toDateString().toString().substring(4,15);
    jQuery('strong.date').contents().replaceWith(HR_fullDate);

});

1

আপনি যদি ক্ষেত্রের ধরণটি Date (ISO format)ব্যবহার করেন তবে ব্যবহার করুন:

$node->field_datetest[$node->language][0][value] = "2011-05-25T10:35";

1

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

$now = date_now('UTC');
$now = date_format($now, "Y-m-d H:i:s");

1

যারা $ ফর্ম_স্টেট এবং পপআপ উইজেট নিয়ে কাজ করছেন তাদের জন্য:

// The date format in this sample is dd/mm/yyyy
$form_state['values']['field_my_date_field']['und'][0]['value']['date'] = '14/05/2014';

1

একটি তারিখ ক্ষেত্রে একটি মান সেট করতে নীচের কোডগুলি অনুসরণ করুন।

হুক_ফর্ম_ল্টার ব্যবহার করা হচ্ছে

$ ফর্ম ["ফিল্ড_ডেট"] ["আনড"] [0] ['# ডিফল্ট_মূল্য'] ['মান'] = $ নতুন_ তারিখ;

Hook_node_submit বা hook_node_presave (ডাটাবেসে মান সংরক্ষণ করা) ব্যবহার করা হচ্ছে

 function MY_MODULE_node_presave($node) 
  {
      $node->field_date['und'][0]['value'] =  '2014-09-23 00:00:00';
  }

অথবা আপনার যদি একটি কাস্টম ক্ষেত্রের মান (হুক_ফর্ম_াল্টারে সংজ্ঞায়িত) অন্যটিতে সংরক্ষণ করতে হয় তবে নীচের কোডগুলি দেখুন।

function MY_MODULE_node_submit($node, $form, &$form_state) {
  if($node->type == 'my_node_type') {
    $test_date =  $form['test_date ']['#value'];
    //Ensure that $test_date format is '2014-09-23 00:00:00'
    $node->field_date['und'][0]['value'] =  $test_date ;
   }
}

0

গৃহীত উত্তরটি আমাকে পিডিওর ব্যতিক্রম দিচ্ছিল। "ডেটস্ট্যাম্প" ক্ষেত্রের জন্য কেবল একটি সাধারণ সময় () কল কাজ করেছিল!

        $entity->field_upload_time["und"][0]["value"] = time();

-1

ব্যবহৃত সময় () এবং ঠিক আছে কাজ ....

$ Fc_item_wrapper-> field_data_pedido-> সেট (সময় ());

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