Drupal 7: दिनांक, दिनांक (ISO प्रारूप) और दिनांक (यूनिक्स टाइमस्टैम्प) में प्रोग्राम के अनुसार दिनांक फ़ील्ड सेट करें


11

फॉर्म एपीआई और हुक_फॉर्म_ल्टर () का उपयोग करके , मैं ड्रुपल 7 के दिनांक फ़ील्ड प्रकारों में से प्रत्येक के लिए मानों को मैन्युअल रूप से कैसे सेट कर सकता हूं (एक वैध यूनिक्स टाइमस्टैम्प का उपयोग करके)?

जब फॉर्म अंतिम रूप से सबमिट किया जाता है तो field_date प्रकार हमेशा खाली सरणियाँ होती हैं। नीचे टूटा हुआ कोड है, जिससे मैं काम कर रहा हूं।

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();
}

मुझे उल्लेख करना चाहिए कि फ़ील्ड विजेट पाठ पर सेट है और यह प्रारूप है 'Ymd H: i: s'

मैंने भी date('Y-m-d H:i:s', time())इसके बजाय कोशिश की है time()

उदाहरण dpm () आउटपुट।

उदाहरण dpm () आउटपुट

मुझे यह भी ध्यान देना चाहिए कि वर्कअराउंड के रूप में मैं फ़ील्ड सेट कर सकता हूं यदि मैं इसे हुक_नोड_स्प्रेस () में संशोधित करता हूं । ऐसा करने के लिए, मैं $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);अभी भी समझना चाहूंगा कि इसके बजाय हुक_फॉर्म_लटर का उपयोग करके यह कैसे करना है।


किस तरह से इस कोड को तोड़ा जाता है?
काउंट्ज़ेरो

दोनों की तारीख ('यम-डी', स्ट्रेटटाइम ('31 मई 2011 ')) और समय () हमेशा खाली हैं। मुझे लगता है कि मैं तारीखों के लिए गलत सरणी का उपयोग कर रहा हूं। $ फॉर्म ['date_field'] [[und '] [०] [' मूल्य '] सही नहीं हो सकता है? डॉक्स पर वापस जाएं।
सिट्रिकगुई

जब फॉर्म अंतिम रूप से सबमिट किया जाता है तो field_date प्रकार हमेशा खाली सरणियाँ होती हैं।
Citricguy

क्या आपने सेट करने की कोशिश की $form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']?
काउंट्ज़ेरो

क्या आप किसी कस्टम कोड को हटाने का प्रयास नहीं कर सकते हैं और फ़ील्ड से मूल रूप से सहेजे गए प्रारूप की जांच करने के लिए ui से फॉर्म जमा कर सकते हैं?
वेस्टिउक

जवाबों:


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'),?
marcvangend

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" (डेट), आदि डेटस्टैम्प के लिए आप बस कर सकते हैं। do eg strtotime ("2011-05-25")।

महत्वपूर्ण: यह भी ध्यान दें कि आपके द्वारा निर्दिष्ट सटीक मूल्य को डेटाबेस में संग्रहीत किया जाएगा, जबकि साइट पर प्रदर्शित वास्तविक समय ओजोन सेटिंग्स के आधार पर भिन्न हो सकता है। जब आप एक नया डेटाटाइम / दिनांक / डेटास्टैम्प फ़ील्ड बनाते हैं, तो आपको पांच अलग-अलग टाइमज़ोन हैंडलिंग विधियों के बीच चयन करना होता है। डिफ़ॉल्ट एक "साइट का समय क्षेत्र" है:

क्षेत्र में डेटा दर्ज करते समय, दर्ज किया गया डेटा साइट के टाइम ज़ोन में माना जाता है। जब डेटा डेटाबेस में सहेजा जाता है, तो इसे यूटीसी में बदल दिया जाता है। हालाँकि, यदि आप उपरोक्त उदाहरण की तरह प्रोग्राम क्षेत्र को निर्धारित करते हैं तो कोई रूपांतरण नहीं होता है, इसलिए सुनिश्चित करें कि आप फ़ील्ड की टाइमज़ोन सेटिंग्स के लिए खाते में हैं। या दूसरे शब्दों में, यदि आप "साइट के समय क्षेत्र" का उपयोग करते हैं, तो सुनिश्चित करें कि समय यूटीसी में है।

यह जानकारी फ़ूनिन्जा के ब्लॉग पर दिनांक फ़ील्ड ( डेटाटाइम , दिनांक, डेटास्टैम्प ) लेबल वाले अनुभाग से संदर्भित की गई थी ।

यह ड्रुपल 7 में प्रोग्रामेटिक नोड निर्माण के लिए एक महान सामान्य संसाधन भी है।


आपको मूल्य कुंजियों के आसपास उद्धरणों की आवश्यकता है
मास्टरपीस

धन्यवाद गुरुजी! आपके सुधार को दर्शाने के लिए अद्यतन किया गया।
एमडी ३

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 में काम करता है, लेकिन hook_form_alter में नहीं।
सिट्रिकगुई

क्या आपने $form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']ऊपर बताए अनुसार सेट करने की कोशिश की ?
काउंट्ज़ेरो

मिला यह नोड $ $ पर निर्धारित है-> field_date [LANGUAGE_NONE] [0]
Citricguy

Hook_form_alter के साथ काम नहीं कर रहा ... कोई मदद?
राजेश विश्वकर्मा

2

दिनांक सामान के लिए हम वर्तमान तिथि प्राप्त करने के लिए एक js लिख सकते हैं ...

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

$ Form_state और पॉपअप विजेट से निपटने वालों के लिए:

// 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

किसी दिनांक फ़ील्ड का मान सेट करने के लिए नीचे दिए गए कोड का पालन करें।

हुक_फॉर्म_ल्टर का उपयोग करना

$ फॉर्म ["field_date"] ["und"] [०] [_ # default_value ’] [$ value’] = $ new_date;

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-> सेट (समय ());

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.