it-swarm-ko.tech

Drupal 7 : 날짜, 날짜 (ISO 형식) 및 날짜 (Unix 타임 스탬프)에 프로그래밍 방식으로 날짜 필드 설정

Form APIhook_form_alter () 를 사용하여 각 Drupal 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();
}

필드 위젯이 텍스트로 설정되어 있으며 형식은 'Y-m-d H : i : s'입니다.

또한 date('Y-m-d H:i:s', time()) 대신 time()을 시도했습니다.

dpm () 출력.

Example dpm() output

또한 해결 방법으로 hook_node_presave ()에서 필드를 수정하면 필드를 설정할 수 있습니다. 이렇게하려면 $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);을 설정하십시오. 대신 hook_form_alter를 사용 하여이 작업을 수행하는 방법을 이해하고 싶습니다.

11
Citricguy

다음은 사이트 시간대를 올바르게 처리하는 코드입니다.

 $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',
  );
14
Vadym Myrgorod

각 날짜 필드 유형은 다른 형식의 타임 스탬프를 예상합니다 (데이터베이스에 저장된 방식에 따라).

// 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");

완전한 날짜를 지정할 필요는 없습니다. 날짜 시간 및 날짜의 경우 0으로 채울 수 있습니다 (예 : "2011-05-00 00:00:00"(날짜 시간), "2011-00-00T00 : 00 : 00"(날짜) 등. 날짜 스탬프의 경우 예를 들어 strtotime ( "2011-05-25").

중요 : 또한 지정한 정확한 값이 데이터베이스에 저장되지만 사이트에 표시되는 실제 시간은 시간대 설정에 따라 다를 수 있습니다. . 새로운 datetime/date/datestamp 필드를 만들면 5 가지 시간대 처리 방법 중에서 선택할 수 있습니다. 기본은 "사이트의 시간대"입니다.

필드에 데이터를 입력 할 때 입력 한 데이터는 사이트의 시간대에있는 것으로 가정합니다. 데이터가 데이터베이스에 저장되면 UTC로 변환됩니다. 그러나 위의 예와 같이 프로그래밍 방식으로 날짜 필드를 설정하면 변환이 수행되지 않으므로 필드의 시간대 설정을 고려해야합니다. 즉, "사이트의 시간대"를 사용하는 경우 시간이 UTC인지 확인하십시오.

이 정보는 fooninja의 블로그에있는 날짜 필드 (날짜, 날짜, 날짜 스탬프) 섹션에서 참조되었습니다.

또한 Drupal 7의 프로그래밍 방식 노드 생성을위한 훌륭한 일반 리소스입니다.

6
MD3

이것은 나를 위해 일했습니다.

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

Date의 경우 현재 날짜를 얻기 위해 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);

});
2
Nitesh Sethia

이 수준에서는 time() 값이 작동하지 않습니다.

다음과 같은 것을 사용해야합니다.

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

$ 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
Francisco Luz

날짜 필드에 값을 설정하려면 아래 코드를 따르십시오.

Hook_form_alter 사용

$ form [ "field_date"] [ "und"] [0] [ '# 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';
  }

또는 한 사용자 정의 필드 (hook_form_alter에 정의 됨)의 값을 다른 사용자 정의 필드의 값으로 저장해야하는 경우 아래 코드를 참조하십시오.

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 ;
   }
}
1
Aswini K

이 시도:

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

Date (ISO format) 필드 유형을 사용하는 경우 다음을 사용하십시오.

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

수락 된 답변에 PDO 예외가 발생했습니다. "datestamp"필드에는 간단한 time () 호출 만 작동했습니다!

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