Réponse laconique (pas besoin de changer le fuseau horaire par défaut)
$dateStr = '2008-09-11';
$timezone = 'America/New_York';
$time = strtotime(
$dateStr,
// convert timezone to offset seconds
(new \DateTimeZone($timezone))->getOffset(new \DateTime) - (new \DateTimeZone(date_default_timezone_get()))->getOffset(new \DateTime) . ' seconds'
);
Réponse loquace
Utilice strtotime
La deuxième option de la fonction change le cadre de référence de la fonction. D'ailleurs je préfère ne pas mettre à jour le fuseau horaire par défaut du script :
http://php.net/manual/en/function.strtotime.php
int strtotime ( string $time [, int $now = time() ] )
La fonction s'attend à recevoir une chaîne de caractères contenant un format de date anglais et essayera d'analyser ce format en un timestamp Unix (le nombre de secondes depuis le 1er secondes depuis le 1er janvier 1970 00:00:00 UTC), par rapport à l'horodatage donné dans now, ou l'heure actuelle si now n'est pas fourni.
Et une aide
/**
* Returns the timestamp of the provided time string using a specific timezone as the reference
*
* @param string $str
* @param string $timezone
* @return int number of the seconds
*/
function strtotimetz($str, $timezone)
{
return strtotime(
$str, strtotime(
// convert timezone to offset seconds
(new \DateTimeZone($timezone))->getOffset(new \DateTime) - (new \DateTimeZone(date_default_timezone_get()))->getOffset(new \DateTime) . ' seconds'
)
);
}
var_export(
date(
'Y-m-d',
strtotimetz('this monday', 'America/New_York')
)
);
Cette approche n'est peut-être pas la plus performante, mais elle fonctionne bien lorsque vous connaissez le fuseau horaire par défaut et le décalage. Par exemple, si le fuseau horaire par défaut est UTC
et le décalage est -8
heures :
var_dump(
date(
'Y-m-d',
strtotime('this tuesday', strtotime(-8 . ' hours'))
)
);
1 votes
Pourquoi prendre en compte le fuseau horaire quand il n'y a pas d'heure spécifiée ?
0 votes
Désolé pour la confusion. Ce sera le minuit de ce jour (début du jour spécifié).
0 votes
Si vous prenez minuit comme heure par défaut, cela compte...
0 votes
php.net/manual/fr/function.date-default-timezone-set.php
4 votes
Votre fuseau horaire est invalide, il devrait être
America/New_York