Есть ли функция PHP для проверки нулевой даты

Это - то, как мне удалось сделать это путем изменения сценария MSBUILD в моем.CSPROJ файле:

Первый, откройте свой.CSPROJ файл как файл, а не как проект. Прокрутите к нижней части файла, пока Вы не находите, что это прокомментировало код, незадолго до завершения тега Проекта:

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->

Теперь мы просто вставляем нашу собственную цель AfterBuild для удаления любого существующего XmlSerializer и SGen наше собственное, как так:

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
   <!-- Delete the file because I can't figure out how to force the SGen task. -->
   <Delete
     Files="$(TargetDir)$(TargetName).XmlSerializers.dll"
     ContinueOnError="true" />
   <SGen
     BuildAssemblyName="$(TargetFileName)"
     BuildAssemblyPath="$(OutputPath)"
     References="@(ReferencePath)"
     ShouldGenerateSerializer="true"
     UseProxyTypes="false"
     KeyContainer="$(KeyContainerName)"
     KeyFile="$(KeyOriginatorFile)"
     DelaySign="$(DelaySign)"
     ToolPath="$(TargetFrameworkSDKToolsDirectory)"
     Platform="$(Platform)">
      <Output
       TaskParameter="SerializationAssembly"
       ItemName="SerializationAssembly" />
   </SGen>
</Target>

, Который работает на меня.

31
задан Laoneo 22 April 2015 в 14:33
поделиться

1 ответ

Этого нужно избежать любой ценой, чтобы использовать и сохранить нулевые даты. Эта функция могла помочь преодолеть разрыв, пока они полностью не удалены из Вашего кода. Может быть это, мог быть назван "isEmptyDate" или "isNullDate".

// Returns 'true' for zero, zero dates or times, null, false
function isZeroDate($date)
{
  if (empty($date)) return true;

  if (is_string($date)) {
    // Extract any character that it's not digit and convert it to int
    // 0000-00-00 00:00 || 0000 || 00:00 || 0000-00-00 will return true
    $ival = intval(preg_replace('~\D~', '', $date), 10);
    if ($ival == 0) return true;
  }

  return false;
}

Углерод и классы DateTime не могут проанализировать нулевые даты с этим форматом "0000-00-00 0:00:00".

С любой платформой PHP как Laravel, используйте nullable столбцы в своих миграциях для хранения ПУСТЫХ дат в DB

, например, в Laravel:

$table->timestamp('some_date')->nullable()->default(null);

, например, в MySql:

create table date_test (some_date datetime null default null);
insert into date_test (some_date) values (null);
0
ответ дан 27 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: